مقدمة للعديد من طرق التنفيذ واختلافات تجمع خيوط Java
استيراد java.text.dateformat ؛ استيراد java.text.simpleDateFormat ؛ import java.util.arraylist ؛ استيراد java.util.date ؛ استيراد java.util.list java.util.concurrent.executors ؛ import java.util.concurrent.future ؛ testthroadpool {// -newfixedthreadpool تشبه cachethreadpool ، ويمكن أيضًا استخدامها إذا كان يمكن استخدامها ، ولكن لا يمكنها إنشاء مؤشرات ترابط جديدة في أي وقت / لا يمكن أن يكون في أي وقت ، يمكن أن يكون في المرحلة الثابتة. في هذا الوقت ، إذا كان هناك مؤشر ترابط جديد يجب إنشاؤه ، فلا يمكن وضعه إلا في قائمة انتظار أخرى والانتظار حتى ينتهي الخيط في الخيط الحالي ويتم نقله من التجمع مباشرة // - على عكس cachethreadpool ، لا يتمتع بآلية TCP أو udp على غرار TCP أو udp بشكل كبير ، ولكن بما أن الوثيقة لا تذكرها ، على غرار TCP أو udp. يستهدف FlexThreadPool في الغالب بعض المواضيع المتزامنة المستقرة للغاية والمستقرة للغاية ، وتستخدم معظمها في الخوادم // - من الكود المصدري للطريقة ، وتجمع ذاكرة التخزين المؤقت وثبات مكالمات التجمع نفس تجمع الأساس ، لكن المعلمات مختلفة: // لا يتم تحديد عدد مؤشر ترابط البركة الثابتة ، وهو لا يتسامح مع المضيفين. النظر على الإطلاق) ، 60 ثانية من الخمول الثابتة الثابتة الثابتة الثابتة = Executors.NewFixedThreadPool (6) ؛ // -cache Pool ، تحقق أولاً مما إذا كان هناك مؤشرات ترابط سابق في المجمع ، إذا كان هناك ، إعادة استخدام. إذا لم يكن الأمر كذلك ، فإن قم بإنشاء مؤشر ترابط جديد وأضفه إلى تجمع Pool // -/-cache عادةً ما يتم استخدامه لأداء بعض المهام غير المتزامنة مع العمر القصير جدًا // لذلك ، لا يتم استخدامه كثيرًا في بعض خوادم النوع الخفي الموجهة نحو الاتصال. // - يجب أن يكون الخيط الذي يمكن إعادة استخدامه موضوعًا في المسبح داخل المهلة الخاملة. المهلة الافتراضية هي الستينيات. إذا تجاوز وقت الخمول المدة ، فسيتم إنهاء مثيل الخيط ونقله خارج المجمع. // لاحظ أن الخيط الذي يضعه في المخزون المخبوق لا يدعو للقلق بشأن نهايته. إذا كان غير نشط بعد مهلة ، فسيتم إنهائه تلقائيًا. static static eventorservice cacheservice = Executors.NewCachedThreadPool () ؛ // -singleton Thread ، لا يمكن أن يكون هناك سوى مؤشر ترابط واحد في أي مجموعة زمنية // -المجمع الأساسي هو نفسه تجمع ذاكرة التخزين المؤقت والمجمع الثابت ، ولكن عدد المواضيع 1-1،0 ثوانٍ (بدون خمول) SeviceService Signeservice = Executors.NewsingleTheReadexecutor () ؛ // -scheduled thread pool // -/ يمكن تأخير المواضيع الموجودة في هذا المجمع بالتسلسل وفقًا للجدول الزمني ، أو الخدمات الخاصة بـ static eventorservice signedService = Executors.NewScheduledThreadPool (10) ؛ public static void main (string [] args) {dateformat format = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss") ؛ قائمة <integer> customerlist = new ArrayList <integer> () ؛ System.out.println (Format.Format (New Date ())) ؛ TestFixedThreadPool (ثابت ، قائمة العملاء) ؛ System.out.println ("--------------------------") ؛ TestFixedThreadPool (ثابت ، قائمة العملاء) ؛ ثابتة. shutdown () ؛ system.out.println (ثابتة .isshutdown ()) ؛ System.out.println ("--------------------------------------------------------") ؛ TestcachethreadPool (Cacheservice ، CustomerList) ؛ System.out.println ("--------------------------------------------------------") ؛ TestcachethreadPool (Cacheservice ، CustomerList) ؛ CacheService.shutdownNow () ؛ System.out.println ("--------------------------------------------------------") ؛ TestSingLeserviceThreadPool (Singleservice ، CustomerList) ؛ TestSingLeserviceThreadPool (Singleservice ، CustomerList) ؛ singleservice.shutdown () ؛ System.out.println ("--------------------------------------------------------") ؛ TestScheduleDserviceThreadPool (ScheduleDservice ، CustomerList) ؛ TestScheduleDserviceThreadPool (ScheduleDservice ، CustomerList) ؛ SignedService.shutdown () ؛ } اختبار الفراغ الثابت العام testScheduledServiceThreadPool (خدمة ExecutorService ، قائمة <integer> CustomerList) {list <callable <integer>> listCallable = new ArrayList <callable <integer> () ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) {callable <integer> callable = new callable <integer> () {Override public integer call () يلقي استثناء {return new random (). nextint (10) ؛ }} ؛ listCallable.Add (قابل للاتصال) ؛ } جرب {list <future <integer>> listfuture = service.invokeall (listCallable) ؛ لـ (المستقبل <integer> المستقبل: listfuture) {Integer id = future.get () ؛ customerlist.add (id) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } system.out.println (customerlist.toString ()) ؛ ) لـ (int i = 0 ؛ i <10 ؛ i ++) {callable <list <integer >>> callable = new callable <list <integer> () {Override public list <integer> call () rems {list <integer> list = getList (new random (). nextint (10)) ؛ منطقية isStop = false ؛ بينما (list.size ()> 0 &&! isStop) {system.out.println (thread.currentThRead (). getId () + " - Sleep: 1000") ؛ isStop = صحيح ؛ } قائمة الإرجاع ؛ }} ؛ listCallable.Add (قابل للاتصال) ؛ } جرب {list <future <list <integer>>> listfuture = service.invokeall (listCallable) ؛ لـ (Future <list <integer >> future: listfuture) {list <integer> list = future.get () ؛ customerlist.addall (قائمة) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } system.out.println (customerlist.toString ()) ؛ ) لـ (int i = 0 ؛ i <10 ؛ i ++) {callable <list <integer>> callable = new callable <list <integer> () {Override public list <integer> call () rems stispion {list <integer> list = getList (new random (). nextint (10)) ؛ منطقية isStop = false ؛ بينما (list.size ()> 0 &&! isStop) {system.out.println (thread.currentThRead (). getId () + " - Sleep: 1000") ؛ isStop = صحيح ؛ } قائمة الإرجاع ؛ }} ؛ listCallable.Add (قابل للاتصال) ؛ } جرب {list <future <list <integer>>> listfuture = service.invokeall (listCallable) ؛ لـ (Future <list <integer >> future: listfuture) {list <integer> list = future.get () ؛ customerlist.addall (قائمة) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } system.out.println (customerlist.toString ()) ؛ ) لـ (int i = 0 ؛ i <10 ؛ i ++) {callable <list <integer>> callable = new callable <list <integer> () {Override public list <integer> call () rems stispion {list <integer> list = getList (new random (). nextint (10)) ؛ منطقية isStop = false ؛ بينما (list.size ()> 0 &&! isStop) {system.out.println (thread.currentThRead (). getId () + " - Sleep: 1000") ؛ isStop = صحيح ؛ } قائمة الإرجاع ؛ }} ؛ listCallable.Add (قابل للاتصال) ؛ } جرب {list <future <list <integer>>> listfuture = service.invokeall (listCallable) ؛ لـ (Future <list <integer >> future: listfuture) {list <integer> list = future.get () ؛ customerlist.addall (قائمة) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } system.out.println (customerlist.toString ()) ؛ } القائمة الثابتة العامة <integer> getList (int x) {list <integer> list = new ArrayList <integer> () ؛ list.add (x) ؛ list.add (x * x) ؛ قائمة العودة }}استخدام: LinkedBlockingQueue لتنفيذ شرح تجمع مؤشرات الترابط
// على سبيل المثال: CorePoolSize = 3 ، MaximumpoolSize = 6 ، LinkedBlockingQueue (10) // طريقة المعالجة الافتراضية لـ DesjectedExecutionHandler هي: ThreadPoolexecutor.abortpolicy // threadpoolexecutor eventorservice = new threadpoolexecutor (corepoolsize ، maximumpoolsize ، LinkedBlockingQueue <Runnable> (10)) ؛ // 1. إذا كان مؤشر الترابط الذي يعمل في تجمع مؤشرات الترابط (أي ، لا يصل الاتصال على executorService.execute) إذا كان عدد مؤشرات الترابط تجاوز LinkedBlockingQueue.init (10) وتجاوزه> = init (10)+corepoolsize (3) ، وهو أقل من init (10)+maximumpoolsize. عدد المواضيع التي تم تشغيلها حاليًا هي: (مؤشرات الترابط الحالية (10)) // 3. إذا كان عدد المواضيع التي تسمى init (10)+maximumpoolsize يتم التعامل معها وفقًا لقواعد DesideDexecutionHandler.
حول: شرح العديد من التطبيقات الافتراضية لـ DEFEDEXECUTEHINDLER
// يتم استخدام الافتراضي: threadpoolexecutor.abortpolicy. يتم رفض المعالج وسيقوم بإلقاء وقت تشغيل رفض. سياسة ResjectedExecutionHandler = New ThreadPoolexecutor.abortpolicy () ؛ /// في ThreadPoolexecutor.CallerRunspolicy ، يستدعي مؤشر الترابط التنفيذ نفسه الذي يدير المهمة. توفر هذه الاستراتيجية آلية بسيطة للتحكم في التغذية المرتدة يمكن أن تبطئ تقديم مهام جديدة. // policy = new threadpoolexecutor.callerrunspolicy () ؛ /// في threadpoolexecutor.discardPolicy ، سيتم حذف المهام التي لا يمكن تنفيذها. // policy = new threadpoolexecutor.discardpolicy () ؛ /// في threadpoolexecutor.discardoldestpolicy ، إذا لم يتم إغلاق المنفذ ، فسيتم حذف المهمة على رأس قائمة انتظار العمل ، وسيتم تنفيذ البرنامج إعادة إعادة إعادة المحاولة (كرر هذه العملية إذا كانت تفشل مرة أخرى). // policy = new threadpoolexecutor.discardoldestpolicy () ؛
المقدمة أعلاه لأساليب التنفيذ والاختلافات في مجموعة مؤشرات ترابط Java هي كل المحتوى الذي شاركته معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.