Aufrufmethode:
/** * Anzahl der Klicks/Monat (Jahr) Anruf // Statistikdatensatz X List <string> xList = new ArrayList <string> (); xlist.add ("Januar"); XLIST.ADD ("Februar"); XLIST.ADD ("März"); XLIST.ADD ("April"); XLIST.ADD ("May"); XLIST.ADD ("June"); XLIST.ADD ("Juli"); XLIST.ADD ("Juli"); xlist.add ("August"); xlist.add ("September"); xlist.add ("Oktober"); XLIST.ADD ("November"); XLIST.ADD ("Dezember"); // Statistics Dataset Yliste <Ganzzahl> ylist = new ArrayList <Ganzzahl> (); // Threadwertliste empfangen <Future <list <map <String, Objekt >>>>>>> futurelist = new ArrayList <Future <list <map <String, Objekt >>> (); // Counter int count = 0; // Erstellen Sie einen Thread -Pool (entscheiden Sie, wie viele Threads zu starten sind) Executorservice Pool = Executors.NewCachedThreadpool (); // monatliche Protokollanalyse für (int m = 1; m <= 12; m ++) {// Datumsparameterliste <string> datelist = new ArrayList <string> (); // String date = ""; // Bestimmen Sie, wie viele Tage int Tage = Calendarutil.weePFORMONTH (Integer.ValueOf (Jahr), m); // Kombinationsdatum für (int i = 1; i <= dage; i ++) {if (i <= 9) {if (m <= 9) {Date = Jahr + "-0" + m + "-0" + i; } else {Date = Jahr + "-" + m + "-0" + i; }} else {if (m <= 9) {Date = Jahr + "-0" + m + "-" + i; } else {Date = Jahr + "-" + m + "-" + i; }} datelist.add (Datum); } // Future <list <map <String, Objekt >>> future = pool.submit (neue ReadLogFileCallableByyear (Datelist)); Futurelist.Add (Zukunft); } // Schließen Sie den Thread Pool pool.shutdown (); // Empfangen Sie das Ergebnissatz für (Future <list <map <String, Objekt >>>> Future: Futurelist) {try {// Empfangen Sie die Parameterliste <map <String, Objekt >>> list = Future.get (1, TimeUnit.seconds); // Setzen Sie den Parameter für (int p = 0; p <list.size (); p ++) {count+= (int) list.get (p) .get ("clickCount"); if (list.get (p) .get ("monat"). Equals ("01") {ylist.add ((Integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("02") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("03") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("03") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("03") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("04") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("05") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("06") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("06") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("06") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("07") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("08") {ylist.add ((Integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("09") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("09") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("09") {ylist.add ((integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("10") {ylist.add ((Integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("11") {ylist.add ((Integer) list.get (p) .get ("clickCount"); } else if (list.get (p) .get ("monat"). Equals ("12") {ylist.add ((Integer) list.get (p) .get ("clickCount"); }}}} catch (Ausnahme e) {e.printstacktrace (); }} setAttr ("TotalCount", count); setAttr ("x", xlist); setAttr ("y", ylist); Renderjson (); }Multithread -Methode:
Paket com.ninemax.util.Loganalysis; import Java.io.buffenedReader; Import Java.io.file; Import Java.io.fileinputStream; Import Java.io.ioException; importieren java.io.inputstreamreader; import. java.util.map; import java.util.concurrent // Result -Set öffentliche Liste <map <String, Objekt >>> list = new ArrayList <map <String, Objekt >> (); public readLogFileCallableByyear (Liste <string> clickDate) {this.clickdate = clickDate; } @Override publiclist <map <String, Objekt >> call () löst Ausnahme aus {// Parameter empfangen <String <String, Objekt> map = new Hashmap <String, Object> (); // FileInputStream verwenden, um DateiinformationsdateieinputStream fis = null zu lesen. // InputStreamReader verwenden, um InputStreamReader Reader = NULL zu transcode; // Verwenden Sie BufferedReader, um Buffer BufferedReader bufeader = null zu buffer; // StringBuffer verwenden, um Dateiinhalt Container StringBuffer bufer zu empfangen, bufer bufer bufer (). StringBuffer (); // klicks/monat int monatclick = 0; für (int i = 0; i <clickdate.size (); i ++) {// Dateidatei klickLogfile = new Datei (constantil.loglocation, "article.click."+ clickDate.get (i)+ ".txt"); // Bestimmen Sie, ob die Datei existiert, wenn (! ClickLogfile.exists () || clickLogfile.isdirectory ()) {System.err.println (klickdate.get (i) + + "Die Datei existiert ..."); map.put ("monat", klickdate.get (i) .substring (5, 7)); map.put ("ClickCount", 0); list.add (map); Rückgabeliste; } else {try {// node stream fis = new FileInputStream (clickLogfile); // stream reader = new InputStreamReader (fis, "utf-8") konvertieren; // Verarbeitungsstream bufeader = new bufferedReader (reader); // Counter int count = 0; // String line = "" lesen; // Datei lesen while ((line = bufreader.readline ())! // Daten empfangen if (! Line.equals (null) &&! Line.equals ("") {buf.append (Zeile + "/n"); }} if (count == 0) {count = 0; } else {count = count - 1; } monatClick += count; } catch (Ausnahme e) {e.printstacktrace (); } endlich {// Stream try {bufreader.close (); reader.close (); fis.close (); } catch (ioException e) {e.printstacktrace (); }}}} // Ergebnis set map.put ("monat", klickdate.get (0) .substring (5, 7)); if (monatclick == 0) {map.put ("clickCount", 0); } else {map.put ("ClickCount", monatClick); } list.add (map); Rückgabeliste; }}Ich werde Ihnen ein Beispiel für einen Internetnutzer teilen, was ebenfalls sehr gut ist
Import java.util.concurrent Klassen, die Callable -Schnittstelle und Klassen implementieren, die Runnable implementieren, sind Aufgaben, die von anderen Threads ausgeführt werden können. * Callable und Runnable haben mehrere Unterschiede: * (1) Die durch Callable angegebene Methode ist CALL (), während die durch Runnable angegebene Methode ausgeführt wird (). * (2) Die aufrufbare Aufgabe kann den Wert nach seiner Ausführung zurückgeben, während die Runnable -Aufgabe den Wert nicht zurückgeben kann. * (3) Die CALL () -Methode kann Ausnahmen werfen, während die Run () -Methode keine Ausnahmen auslösen kann. * (4) Führen Sie die Callable -Aufgabe aus und Sie können ein zukünftiges Objekt erhalten. Die Zukunft ist das Ergebnis einer asynchronen Berechnung. * Es bietet eine Methode, um zu prüfen, ob die Berechnung abgeschlossen ist, um die Berechnung abzuschließen und die Ergebnisse der Berechnung abzurufen. * Durch das zukünftige Objekt können Sie den Status der Aufgabenausführung verstehen, die Aufgabenausführung abbrechen und die Ergebnisse der Aufgabenausführung erhalten. */public class CallableAnDFuture {/***Passen Sie eine Aufgabenklasse an, um die Callable -Schnittstelle zu implementieren. 0 ";} if (this.flag == 1) {// Wenn der Wert von Flag 1 ist, machen Sie eine unendliche Schleife versuchen. 0 oder 1, dann wird eine Ausnahme geworfen. Neue Ausnahme ("schlechter Flag -Wert!");}}} public static void main (String [] args) {// 3 Callable -Typen Aufgaben mycallableClass task1 = new MyCallableClass (0); Task ExecutorService ES = Executors.NewFixedThreadpool (3); Versuchen Sie die Aufgabe ein und führen Sie sie aus. Ein zukünftiges Objekt wird zurückgegeben, wenn die Aufgabe gestartet wird. // Wenn Sie das Ergebnis der Aufgabenausführung oder einer Ausnahme erzielen möchten, können Sie das zukünftige Objekt bedienen. Future Future1 = ES.Submit (Task1); // Erhalten Sie das Ergebnis der ersten Aufgabe. Wenn die GET -Methode aufgerufen wird, wartet der aktuelle Thread, bis die Aufgabe ausgeführt wird, bevor System.out.println ("Task1:" + Future1.get ()); Future2 = ES.Submit (Aufgabe2); // 5 Sekunden warten, bevor die zweite Aufgabe gestoppt wird. Da die zweite Aufgabe ein unendlicher Schleifen -Thread ist. (Ausnahme e) {System.out.println (e.ToString ());} // den Aufgabenausführungsdienst es.shutdownnow ();}} anhaltenDas obige ist der gesamte Inhalt dieses Artikels. Wenn Sie es benötigen, beziehen Sie sich bitte darauf.