يشارك هذا المثال رمز تنفيذ مجموعة مؤشرات الترابط المكتوبة بخط اليد Java للرجوع إليها. المحتوى المحدد كما يلي
1. تجمع الخيوط هو شكل من أشكال الخيوط المتعددة. أثناء المعالجة ، تتم إضافة المهام إلى قائمة الانتظار ، ثم يتم تشغيل هذه المهام تلقائيًا بعد إنشاء مؤشر الترابط. مؤشرات الترابط بركة الخيوط كلها مؤشرات ترابط الخلفية.
2. بنية تجمع الخيوط البسيطة
3. رمز تجمع الخيوط البسيط (التحسين الذاتي)
استيراد java.util.list ؛/** * واجهة مؤشر الترابط * * Author yjian * date 14:49 2017/10/14 **/واجهة عامة ithreadpool {// إضافة Task Void Execute (Task Runnable) ؛ // أضف تنفيذ المهام المهمة (RunNable [] المهام) ؛ // إضافة Task Void Execute (قائمة <Cronnable> المهام) ؛ // تدمير الموضوع باطل تدمير () ؛} استيراد java.util.linkedlist ؛ استيراد java.util.list ؛ استيراد java.util.concurrent.atomic.atomiclong ؛/** * فئة تنفيذ الخيط (تطبيق بسيط ، optimpty. ithreadpool {// يتم تمكين عدد مؤشرات الترابط بشكل افتراضي int worker_number = 5 ؛ // عدد المواضيع المكتملة هو ثابت ثابت int sumCount = 0 ؛ // قائمة قائمة انتظار المهام ليست آمنة مؤشرات الترابط ، ويمكن تحسينها إلى قائمة ثابتة blockingqueue <Runnable> taskQueue = new LinkedList <Runnable> () ؛ // Thread Workgroup WorkerThRead [] WorkThreads ؛ // atomiclong atomiclong atomiclong = new Atomiclong () ؛ ثابت ThreadPoolimpl Throspool. // طريقة البناء public threadpoolimpl () {this (worker_number) ؛ } public threadpoolimpl (int workernum) {this.worker_number = workernum ؛ // تطوير سلسلة العمل الفضائية للمساحة = عامل جديد [worker_number] ؛ // ابدأ إنشاء مؤشر ترابط عامل لـ (int i = 0 ؛ i <worker_number ؛ i ++) {workthreads [i] = new WorkerThread () ؛ Thread Thread = موضوع جديد (WorkThreads [i] ، "Threadpool-Gorning" + ThreadNum.incrementandget ()) ؛ System.out.println ("تهيئة عدد مؤشرات الترابط" + (i + 1) + "----------- اسم مؤشر الترابط الحالي:" + thread.getName ()) ؛ thread.start () ؛ }} Override Public String ToString () {return "عدد مؤشرات ترابط العامل هو" + Worker_number + "عدد المهام المكتملة" + sumCount + "عدد مهام الانتظار" + taskqueue.size () ؛ }. } ithreadpool ithreadpool static public ithreadpool (int workernum) {// toolerance fault ، إذا كان أقل من أو يساوي 0 ، فإن العدد الافتراضي من مؤشرات الترابط هو (workernum <= 0) {workernum = worker_number ؛ } if (threadpool == null) {threadpool = new threadpoolimpl (workernum) ؛ } return threadpool ؛ } Override public void execute (task runnable) {synchronized (taskqueue) {taskqueue.add (task) ؛ taskqueue.notifyall () ؛ }} Override public void execute (RunNable [] ass) {synchronized (taskqueue) {for (task raunnable: assks) {taskqueue.add (task) ؛ } taskqueue.notifyall () ؛ }} Override public void execute (list <Runnable> ass) {synchronized (taskqueue) {for (task raunnable: tasks) {taskqueue.add (task) ؛ } taskqueue.notifyall () ؛ }} Override public void dorder () {// حيث لا تزال المهمة موجودة في الحلقة ، إذا كان هناك 20 ميلي ثانية من وقت المعالجة بينما (! taskqueue.isempty ()) {try {thread.sleep (20) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ }} // إذا تمت معالجة قائمة انتظار المهمة ، فقم بتدمير الموضوع وقم بمسح المهمة (int i = 0 ؛ i <worker_number ؛ i ++) {workthreads [i] .setworkerFlag () ؛ workthreads [i] = null ؛ } threadpool = null ؛ taskqueue.clear () ؛ }. Override public void run () {runNable Runnable = null ؛ // لا تقلق أبدًا بينما (isrunning) {// non-thread-safe ، لذلك متزامنة (TaskQueue) {بينما (isrunning && taskqueue.isempty ()) {try {// إذا كانت قائمة انتظار المهمة فارغة ، فانتظر مهمة الاستماع 20 مللي ثانية للوصول إلى taskqueue.wait (20) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} // قائمة انتظار المهمة ليست فارغة إذا (! taskqueue.isempty ()) {runNable = taskqueue.remove (0) ؛ // الحصول على المهمة الأولى}} إذا (runnable! = null) {runnable.run () ؛ } sumCount ++ ؛ Runnable = null ؛ }} // تدمير موضوع public void setworkerflag () {iSrunning = false ؛ }}} استيراد java.util.arraylist ؛ استيراد java.util.list ؛/** * فئة الاختبار * * Author yjian * date 15:37 2017/10/14 **/public class threadpooltest {public static void main (] args) {// get thread pool ithreadpool t = قائمة <Runnable> TaskList = new ArrayList <Runnable> () ؛ لـ (int i = 0 ؛ i <100 ؛ i ++) {tasklist.add (new task ()) ؛ } // تنفيذ Task T.Execute (قائمة المهام) ؛ system.out.println (t) ؛ // تدمير thread t.destroy () ؛ system.out.println (t) ؛ } تنفذ المهمة الفئة الثابتة {private static platile int i = 1 ؛ Override public void run () {system.out.println ("مؤشر ترابط معالجته حاليًا:" + thread.currentThRead (). getName () + "تنفيذ المهمة" + (i ++) + "complete") ؛ }}}بعد دراسة رمز مصدر الربيع ، تحقق بعناية من أنماط الربيع شائعة الاستخدام من قبل الرمز. يجب أن تكون مواصفات برامج الكتابة هي نفسها الربيع.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.