طريقة الاتصال:
/** * عدد النقرات/الشهر (السنة) قابلة للاتصال */public void enlyclickcallable () {// get parameters string year = getPara ("year") ؛ // Statistics Set X List <String> Xlist = New ArrayList <Tring> () ؛ Xlist.add ("يناير") ؛ Xlist.add ("February") ؛ Xlist.Add ("March") ؛ Xlist.add ("April") ؛ Xlist.Add ("May") ؛ Xlist.add ("يونيو") ؛ Xlist.add ("يوليو") ؛ Xlist.add ("يوليو") ؛ Xlist.add ("August") ؛ Xlist.add ("سبتمبر") ؛ Xlist.add ("October") ؛ Xlist.add ("نوفمبر") ؛ Xlist.Add ("December") ؛ // Statistics Dataset List <integer> yList = new ArrayList <integer> () ؛ // استقبال قائمة القيمة المرجعية <المستقبل <قائمة <map <string ، object >>>>>>> futureList = new ArrayList <future <list <map <string ، object >>>> () ؛ // counter int count = 0 ؛ // إنشاء تجمع مؤشرات ترابط (حدد عدد المواضيع لبدء) pool seviceStorservice = Executors.NewCachedThreadPool () ؛ // تحليل السجل الشهري لـ (int m = 1 ؛ m <= 12 ؛ m ++) {// جمع معلمات التاريخ <string> datelist = new ArrayList <String> () ؛ // string date = "" ؛ // تحديد عدد الأيام int int = calendarutil.weekformonth (integer.valueof (year) ، m) ؛ // تاريخ الجمع لـ (int i = 1 ؛ i <= days ؛ i ++) {if (i <= 9) {if (m <= 9) {date = year + "-0" + m + "-0" + i ؛ } آخر {date = year + "-" + m + "-0" + i ؛ }} آخر {if (m <= 9) {date = year + "-0" + m + "-" + i ؛ } آخر {date = year + "-" + m + "-" + i ؛ }} datelist.add (date) ؛ }. Futurelist.add (المستقبل) ؛ } // أغلق بركة المسبح. shutdown () ؛ // تلقي النتيجة المحددة لـ (Future <list <map <string ، object >>>> المستقبل: futurelist) {try {// تلقي قائمة المعلمة <map <string ، object >>> list = future.get (1 ، timeUnit.seconds) ؛ // قم بتعيين المعلمة لـ (int p = 0 ؛ p <list.size () ؛ p ++) {count+= (int) list.get (p) .get ("clickCount") ؛ if (list. } آخر إذا (list.get (p) .get ("month"). يساوي ("02")) {yList.Add ((integer) list.get (p) .get ("clickcount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("03")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("03")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("03")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } if if (list.get (p) .get ("month"). equals ("04")) {yList.Add ((integer) list.get (p) .get ("clickcount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("05")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("06")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("06")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("06")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("07")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("08")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("09")) {yList.Add ((integer) list.get (p) .get ("clickcount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("09")) {yList.Add ((integer) list.get (p) .get ("clickcount")) ؛ } آخر إذا (list.get (p) .get ("month"). يساوي ("09")) {yList.Add ((integer) list.get (p) .get ("clickcount")) ؛ } if if (list.get (p) .get ("month"). equals ("10")) {yList.add ((integer) list.get (p) .get ("clickCount")) ؛ } if if (list.get (p) .get ("month"). equals ("11")) {yList.add ((integer) list.get (p) .get ("clickCount")) ؛ } if if (list.get (p) .get ("month"). equals ("12")) {yList.Add ((integer) list.get (p) .get ("clickCount")) ؛ }}}} catch (استثناء e) {E.PrintStackTrace () ؛ }} setattr ("TotalCount" ، count) ؛ setAttr ("x" ، Xlist) ؛ setattr ("y" ، ylist) ؛ RenderJson () ؛ }طريقة multithed:
package com.ninemax.util.loganalysis ؛ import java.io.bufferedreader ؛ import java.io java.util.map ؛ import java.util.concurrent.callable ؛ استيراد com.ninemax.util.loganalysis.tool.constantutil ؛/** * multithed reatce value * * uuthor darker */public class readlogfileCallableByyear dyliment <map <strapher < // return result set public list <map <string ، object >>> list = new ArrayList <map <string ، object >> () ؛ public readlogFileCallableByyear (قائمة <Tring> clickDate) {this.clickDate = clickDate ؛ } Override Public List <Map <String ، Object >> call () rems {// تلقي المعلمات خريطة <سلسلة ، كائن> map = new hashmap <string ، Object> () ؛ // استخدم FileInputStream لقراءة ملفات الملف FileInputStream fis = null ؛ // استخدم inputStreamReader لتنقل البود inputStreamReader Reader = null ؛ // استخدم BufferedReader إلى BufferReaderer Bufreader = null ؛ // استخدم stringBuffer لتلقي ملف حاوية محتوى الملف StringBuffer buf = new StringBuffer () ؛ // نقرات/شهر int monthclick = 0 ؛ لـ (int i = 0 ؛ i <clickdate.size () ؛ i ++) {// الحصول على ملف clicklogfile = new file (constantutil.loglocation ، "article.click."+ clickDate.get (i)+ ".txt") ؛ // حدد ما إذا كان الملف موجودًا إذا (! clicklogfile.exists () || clicklogfile.isdirectory ()) {system.err.println (clickdate.get (i) + "الملف غير موجود ...") ؛ map.put ("month" ، clickdate.get (i) .SubString (5 ، 7)) ؛ map.put ("clickCount" ، 0) ؛ list.add (map) ؛ قائمة العودة } آخر {try {// node dream fis = new FileInputStream (clicklogfile) ؛ // تحويل دفق القارئ = جديد inputStreamReader (FIS ، "UTF-8") ؛ // معالجة دفق buFreader = جديد BufferedReader (reader) ؛ // counter int count = 0 ؛ // قراءة خط السلسلة = "" ؛ // قراءة الملف بينما ((line = buFreader.ReadLine ())! = null) {// count count ++ ؛ // تلقي البيانات if (! line.equals (null) &&! line.equals ("")) {buf.append (line + "/n") ؛ }} if (count == 0) {count = 0 ؛ } آخر {count = count - 1 ؛ } monthclick += count ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {// close tream try {bufreader.close () ؛ reader.close () ؛ fis.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}} // set set map.put ("month" ، clickDate.get (0) .SubString (5 ، 7)) ؛ if (monthclick == 0) {map.put ("clickCount" ، 0) ؛ } آخر {map.put ("clickCount" ، monthclick) ؛ } list.add (map) ؛ قائمة العودة }}سوف أشارككم مثالًا على مستخدم الإنترنت ، وهو أيضًا جيد جدًا
استيراد java.util.concurrent.callable ؛ استيراد java.util.concurrent.executorservice ؛ استيراد java.util.concurrent.executors ؛ استيراد java.util.concurrent.future ؛/*** واجهات قابلة للاتصال و interfaces قابلة للاتصال مماثلة للركض. الفئات التي تنفذ واجهة قابلة للاتصال والفئات التي تنفذ Runnable هي المهام التي يمكن تنفيذها بواسطة مؤشرات ترابط أخرى. * قابلة للاتصال و rawnable لها العديد من الاختلافات: * (1) الطريقة المحددة بواسطة callable هي Call () ، في حين أن الطريقة المحددة بواسطة Runnable يتم تشغيلها (). * (2) يمكن للمهمة القابلة للاتصال إرجاع القيمة بعد تنفيذها ، في حين أن المهمة القابلة للتشغيل لا يمكنها إرجاع القيمة. * (3) يمكن أن ترمي طريقة الاتصال () استثناءات ، في حين أن طريقة Run () لا يمكن أن ترمي الاستثناءات. * (4) قم بتشغيل المهمة القابلة للاتصال ويمكنك الحصول على كائن مستقبلي. يمثل المستقبل نتيجة الحساب غير المتزامن. * يوفر طريقة للتحقق مما إذا كان قد اكتمل الحساب ، لانتظار اكتمال الحساب ، واسترداد نتائج الحساب. * من خلال الكائن المستقبلي ، يمكنك فهم حالة تنفيذ المهمة ، وإلغاء تنفيذ المهمة ، وكذلك الحصول على نتائج تنفيذ المهمة. *//الفئة العامة callableAndFuture {/***تخصيص فئة مهمة لتنفيذ واجهة القابلة للاتصال*/الفئة الثابتة العامة myCallableClass تنفذ {// flag bit private int flag = 0 ؛ public myCallableClass (int flag) {this.flag = flag ؛} 0 "؛} if (this.flag == 1) {// إذا كانت قيمة العلم 1 ، اجعل حلقة لا حصر لها جرب {بينما (صحيح) {system.out.println (" looping ... ") ؛ thread.sleep (2000) ؛ ليس 0 أو 1 ، ثم يتم طرح استثناء. استثناء جديد ("قيمة العلامة السيئة!") ؛}}} الفراغ الثابت العام الرئيسي (سلسلة [] args) {// تحديد 3 أنواع قابلة للاتصال المهام myCallableClass Task1 = new MyCallableClass (0) ؛ myCallableClass task2 = new myCallableClass (1) ؛ المهام ExecutorService es = Executors.NewFixedThreadPool (3) ؛ حاول {// إرسال وتنفيذ المهمة. يتم إرجاع كائن مستقبلي عند بدء المهمة. // إذا كنت ترغب في الحصول على نتيجة تنفيذ المهمة أو استثناء ، فيمكنك تشغيل الكائن المستقبلي. المستقبل 1 = es.submit (Task1) ؛ // احصل على نتيجة المهمة الأولى. إذا تم استدعاء طريقة GET ، فسوف ينتظر مؤشر الترابط الحالي حتى يتم تنفيذ المهمة قبل تنفيذ system.out.println ("Task1:" + Future1.get ()) ؛ Future Future2 = Es.Submit (Task2) ؛ // انتظر لمدة 5 ثوان قبل إيقاف المهمة الثانية. لأن المهمة الثانية هي موضوع حلقة لا حصر له. (استثناء e) {system.out.println (ما سبق هو المحتوى الكامل لهذه المقالة. إذا كنت في حاجة إليها ، يرجى الرجوع إليها.