تقدم هذه المقالة تكوين ThreadPooltAskexecutor Pool Pool ThreadPooltAseCutor ، وتشاركها معك ، على النحو التالي:
1. تكوين ThreadPooltAskexecutor
<!-Pring Thread Pool Executor-> <bean id = "taskexecutor"> <!-الحد الأدنى لعدد مؤشرات الترابط التي يتم الحفاظ عليها بواسطة pool pool-> <property name = "corepoolsize" value = "5" /> <!-مسموح بوقت الخمول-> <property name = "keepaliveseconds" value = "200" value = "10" /> <!-قائمة انتظار ذاكرة التخزين المؤقت-> <property name = "QueUeCapacity" value = "20" /> <!-سياسة التعامل مع المهام-> <property name = "refectedExecutionHandler"> <//> < /property>
وصف حقل السمة
CorePoolsize: الحد الأدنى لعدد الخيوط التي يتم صيانتها بواسطة تجمع الخيوط
Keepaliveseconds: وقت الفراغ المسموح به
MaxPoolsize: الحد الأقصى لعدد الخيوط التي يتم الحفاظ عليها بواسطة تجمع الخيوط
قائمة الانتظار: قائمة انتظار ذاكرة التخزين المؤقت
DesjectedExecutionHandler: التعامل مع الإستراتيجية لرفض المهمة
2. تنفيذ (قابلة للتشغيل) عملية تنفيذ طريقة
إذا كان عدد تجمعات الخيوط أقل من CorePoolsize في هذا الوقت ، حتى لو كانت مؤشرات الترابط الموجودة في تجمع مؤشرات الترابط كلها خاملة ، فيجب إنشاء مؤشر ترابط جديد للتعامل مع المهام المضافة.
إذا كان الرقم الموجود في تجمع الخيوط مساوياً لـ CorePoolsize ، لكن قائمة انتظار قائمة الانتظار غير ممتلئة ، فسيتم وضع المهمة في قائمة انتظار المخزن المؤقت.
إذا كان عدد تجمعات الخيوط أكبر من CorePoolsize في هذا الوقت ، فإن WorkQueue في قائمة انتظار المخزن المؤقت ممتلئة ، وعدد برك مؤشرات الترابط أقل من maxpoolsize ، قم بإنشاء مؤشر ترابط جديد للتعامل مع المهام المضافة.
إذا كان الرقم الموجود في تجمع مؤشرات الترابط أكبر من CorePoolsize في هذا الوقت ، فإن WorkQueue في قائمة انتظار المخزن المؤقت ممتلئ ، والرقم الموجود في تجمع مؤشرات الترابط يساوي MaxPoolsize ، ثم يتم التعامل مع هذه المهمة من خلال السياسة المحددة من قبل المعالج. وهذا يعني أن أولوية مهام التعامل هي: Core Thread CorePoolsize ، قائمة انتظار المهمة ، ومساحة الحجم القصوى. إذا كان الثلاثة ممتلئين ، فاستخدم المعالج للتعامل مع المهمة المرفوضة.
عندما يكون عدد المواضيع في تجمع الخيوط أكبر من CorePoolsize ، إذا كان مؤشر ترابط الخمول لأكثر من Keepalivetime ، فسيتم إنهاء مؤشر الترابط. وبهذه الطريقة ، يمكن لمجموعة مؤشرات الترابط ضبط عدد المواضيع في التجمع.
3. عينة رمز
اختبار جونيت
Runwith (springJunit4ClassRunner.Class) contextConfiguration (فئات = {multiThreadConfig.class}) الفئة العامة multiThReadTest {autowired private threadpooltaskexecutor taskexecutor ؛ AUTOWIRED MultiThReadProcessService MultiThReadProcessService ؛ Test public void test () {int n = 20 ؛ لـ (int i = 0 ؛ i <n ؛ i ++) {taskexecutor.execute (multiThReadDemo جديد (multiThReadProcessService)) ؛ System.out.println ("int i is" + i + "، الآن Threadpool Threads TotalNum هو" + taskexecutor.getActivEcount ()) ؛ } حاول {system.in.read () ؛ } catch (ioException e) {رمي new runTimeException (e) ؛ }}}multithreaddemo
/** * توضيح المعالجة المتزامنة المتعددة * @Author Daniel.zhao * */Public Class MultiThreadDemo تنفذ {private multiThReadProcessService multiThreadProcessService ؛ MultiThReadDemo () {} MultiThReadDemo العامة (MultiThReadProcessService MultiThreadProcessService) {this.multithreadprocessService = multiThreadProcessService ؛ } Override public void run () {multiThReadProcessService.ProcessSomething () ؛ }}MultiThReadProcessService
servicepublic class multiThReadProcessService {public static final logger = logger.getLogger (multiThReadProcessService.class) ؛ / ** * تأخذ عملية المعالجة الافتراضية 1000 مللي ثانية */ public void processsomething () {logger.debug ("MultiThReadProcessService-ProcessSomething" + thread.currentThread () + "...... Start") ؛ حاول {thread.sleep (1000) ؛ } catch (interruptedException e) {رمي new runTimeException (e) ؛ } logger.debug ("MultiThReadProcessService-ProcessSomething" + thread.currentThRead () + "...... end") ؛ }}multithreadconfig
configuration @componentscan (basePackages = {"com.xxx.multithread"}) eMporTresource (value = {"classpath: config/application-task.xml"})ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.