Méthode d'appel:
/ ** * Numéro de clics / mois (année) Calable * / public void annuelClickCallable () {// Get Paramètres String Year = getPara ("Year"); // Statistics Data Set x list <string> xlist = new ArrayList <string> (); xList.add ("janvier"); xlist.add ("février"); xList.add ("mars"); xlist.add ("avril"); xList.add ("May"); xlist.add ("juin"); xList.add ("juillet"); xList.add ("juillet"); xlist.add ("août"); xlist.add ("septembre"); xlist.add ("octobre"); xlist.add ("novembre"); xlist.add ("décembre"); // Statistics DataSet y List <Integer> ylist = new ArrayList <Integer> (); // Recevoir la liste des valeurs de thread <futur <list <map <string, objet >>>>>>> futureList = new ArrayList <futur <list <map <string, objet >>>> (); // compteur int count = 0; // Créez un pool de threads (décidez du nombre de threads à démarrer) ExecutorService pool = exécutors.newcachedThreadPool (); // Analyse du journal mensuel pour (int m = 1; m <= 12; m ++) {// Collection des paramètres de date Liste <string> dateList = new ArrayList <string> (); // String Date = ""; // déterminer combien de jours int jours = calendarutil.weekformonth (Integer.valueof (année), m); // Date de combinaison pour (int i = 1; i <= jours; i ++) {if (i <= 9) {if (m <= 9) {date = an + "-0" + m + "-0" + i; } else {date = an + "-" + m + "-0" + i; }} else {if (m <= 9) {date = an + "-0" + m + "-" + i; } else {date = an + "-" + m + "-" + i; }} datelist.add (date); } // Démarrer Future <list <map <string, objet >>> futur = pool.submit (new ReadLogFileCallableByyear (dateList)); futureList.add (futur); } // Fermez le fil de filetage Pool.shutdown (); // reçoit le jeu de résultats pour (future <list <map <string, objet >>>> futur: futureList) {try {// reçoit la liste des paramètres <map <string, objet >>> list = future.get (1, timeunit.seconds); // Définissez le paramètre pour (int p = 0; p <list.size (); p ++) {count + = (int) list.get (p) .get ("clickCount"); if (list.get (p) .get ("mois"). equals ("01")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("02")) {ylist.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("03")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("03")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("03")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("04")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("05")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("06")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("06")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("06")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("07")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("08")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("09")) {ylist.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("09")) {ylist.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("09")) {ylist.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("10")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("11")) {yList.add ((Integer) list.get (p) .get ("clickCount")); } else if (list.get (p) .get ("mois"). equals ("12")) {yList.add ((Integer) list.get (p) .get ("clickCount")); }}}} catch (exception e) {e.printStackTrace (); }} setAttr ("totalCount", count); setAttr ("x", xlist); setAttr ("y", ylist); Renderjson (); }Méthode multithread:
package com.ninemax.util.loganalysis; import java.io.buffereDaDer; import java.io.file; import java.io.fileinputStream; import java.io.irayception; import java.io.inputstreamreader; import java.util.arraylist; import java.util.hashmap; import java. java.util.map; import java.util.concurrent.callable; import com.ninemax.util.loganalysis.tool.constantutil; / ** * Valeur de retour multithread * * @Author Darker * * / Public ClasslogFileCallableByyear Impldences Callable <list <map <String, objet >>> {// Date Arrey Private // RETOUR SET SET PUBLIC LIST <Map <String, Object >>> list = new ArrayList <Map <String, Object >> (); public readLogFileCallableByyear (list <string> clickdate) {this.clickdate = clickdate; } @Override public list <map <string, object >> call () lève l'exception {// des paramètres de réception map <string, objet> map = new hashmap <string, object> (); // Utilisez FileInputStream pour lire les informations de fichier FileInputStream fis = null; // Utilisez InputStreamReader pour transcoder InputStreamReader Reader = NULL; // Utilisez BufferedReader pour tamponner BufferedReader Bufreader = NULL; // Utilisez StringBuffer pour recevoir le contenu de contenu StringBuffer Buf = new StringBuffer (); // Clicks / Mois int moisclick = 0; for (int i = 0; i <clickdate.size (); i ++) {// get file file clicklogfile = new File (constantUtil.loglocation, "article.click." + clickdate.get (i) + ".txt"); // Déterminez si le fichier existe si (! Clicklogfile.exists () || clicklogfile.isdirectory ()) {System.err.println (clickdate.get (i) + "Le fichier n'existe pas ..."); map.put ("mois", clickdate.get (i) .substring (5, 7)); map.put ("clickCount", 0); list.add (map); Liste de retour; } else {try {// Node Stream fis = new FileInputStream (clicklogfile); // convertit Stream Reader = new InputStreamReader (FIS, "UTF-8"); // Traitement Stream BuFreader = new BuffereDReader (Reader); // compteur int count = 0; // Lire String line = ""; // Lire le fichier while ((line = bufReader.readline ())! = Null) {// count count ++; // reçoit des données if (! Line.equals (null) &&! Line.equals ("")) {buf.append (line + "/ n"); }} if (count == 0) {count = 0; } else {count = count - 1; } Moisclick + = count; } catch (exception e) {e.printStackTrace (); } enfin {// close stream try {bufreader.close (); Reader.Close (); fis.close (); } catch (ioException e) {e.printStackTrace (); }}}} // set set map.put ("mois", clickdate.get (0) .substring (5, 7)); if (MonthClick == 0) {map.put ("clickCount", 0); } else {map.put ("ClickCount", MoisClick); } list.add (map); Liste de retour; }}Je partagerai avec vous un exemple de l'intérêt, qui est également très bon
import java.util.concurrent.callable; import java.util.concurrent.executorService; import java.util.concurrent.executors; importer java.util.concurrent.future; / ** * interfaces callables et futures * Les appels sont des interfaces similaires à Runnable. Les classes qui implémentent l'interface callable et les classes qui implémentent Runnable sont des tâches qui peuvent être exécutées par d'autres threads. * Callable et runnable ont plusieurs différences: * (1) La méthode spécifiée par callable est call (), tandis que la méthode spécifiée par Runnable est exécutée (). * (2) La tâche callable peut renvoyer la valeur après son exécution, tandis que la tâche exécutable ne peut pas renvoyer la valeur. * (3) La méthode Call () peut lancer des exceptions, tandis que la méthode run () ne peut pas lancer des exceptions. * (4) Exécutez la tâche appelable et vous pouvez obtenir un futur objet. L'avenir représente le résultat d'un calcul asynchrone. * Il fournit une méthode pour vérifier si le calcul est terminé, pour attendre que le calcul soit terminé et pour récupérer les résultats du calcul. * Grâce à l'objet futur, vous pouvez comprendre l'état d'exécution de la tâche, annuler l'exécution de la tâche et également obtenir les résultats de l'exécution de la tâche. * / classe publique callableAndFuture {/ ** * Personnalisez une classe de tâche pour implémenter l'interface callable * / classe publique statique MyCallableClass implémente callable {// bit inducteur private indugl = 0; public MyCallableClass (int flag) {this.flag = drap 0 ";} if (this.flag == 1) {// Si la valeur de l'indicateur est 1, faites une boucle infinie try {while (true) {System.out.println (" Looping ... "); Thread.Sleep (2000);}} capture (interruptedException e) {System.out.println (" interrupté ");} return" false ";} 0 ou 1, puis une exception est lancée. Nouvelle exception ("Bad Flag Value!");}}} public static void main (String [] args) {// définir 3 types callables tasks myCallableClass task1 = new myCallableClass (0); myCallableClass Task2 = new MyCalleLleclass (1); MyCallableClass Task3 = new Task ExecutorService es = exécutors.newFixEdThreadpool (3); essayez {// soumettre et exécuter la tâche. Un futur objet est retourné lorsque la tâche est démarrée. // Si vous souhaitez obtenir le résultat de l'exécution de la tâche ou une exception, vous pouvez exploiter le futur objet. Future Future1 = es.submit (tâche1); // obtient le résultat de la première tâche. Si la méthode GET est appelée, le thread actuel attendra que la tâche soit exécutée avant d'exécuter System.out.println ("Task1:" + futur1.get ()); futur future2 = es.submit (tâche2); // attendez 5 secondes avant d'arrêter la deuxième tâche. Parce que la deuxième tâche est une boucle infinie thread.sleep (5000); system.out.println ("tâche2 annuler:" + future2.cancel (true)); // obtiendra la sortie de la troisième tâche, car l'exécution de la troisième tâche provoquera une exception // donc l'instruction suivante entraînera une exception pour lancer Future Future3 = es.submit (tâche3); System.out.Println ("Task3:". (Exception e) {System.out.println (e.toString ());} // Arrêtez le service d'exécution de la tâche es.shutdownnow ();}}Ce qui précède est l'intégralité du contenu de cet article. Si vous en avez besoin, veuillez y consulter.