บทความนี้แนะนำการกำหนดค่าของสปริงพูลพูลพูล Pooltaskexecutor และแชร์กับคุณดังนี้:
1. การกำหนดค่า threadpooltaskexecutor
<!-สปริงเธรดพูลผู้ดำเนินการ-> <bean id = "taskexecutor"> <!-จำนวนเธรดขั้นต่ำที่เก็บรักษาไว้โดยพูลเธรด-> <property name = "corepoolsize" value = "5" /> <! value = "10" /> <!-คิวแคช-> <ชื่อคุณสมบัติ = "queUecapacity" value = "20" /> <!-นโยบายการจัดการสำหรับการปฏิเสธงาน-> <ชื่อคุณสมบัติ = "ปฏิเสธการกำหนดค่าแฮนด์เลอร์"> <bean /> < /property>
คำอธิบายฟิลด์แอตทริบิวต์
CorePoolsize: จำนวนเธรดขั้นต่ำที่เก็บรักษาไว้โดยเธรดพูล
KeepaliveSeconds: อนุญาตเวลาว่าง
MaxPoolSize: จำนวนเธรดสูงสุดที่เก็บรักษาไว้โดยเธรดพูล
QueueCapacity: คิวแคช
ปฏิเสธ ExpledExecutionHandler: กลยุทธ์การจัดการสำหรับการปฏิเสธงาน
2. ดำเนินการตามวิธีการดำเนินการ (runable) วิธีการ
หากจำนวนพูลเธรดน้อยกว่า corepoolsize ในเวลานี้แม้ว่าเธรดในพูลเธรดจะไม่ได้ใช้งานทั้งหมดจะต้องสร้างเธรดใหม่เพื่อจัดการงานที่เพิ่มเข้ามา
หากหมายเลขในพูลเธรดเท่ากับ corepoolsize แต่งานคิวบัฟเฟอร์ไม่เต็มแล้วงานจะถูกวางไว้ในคิวบัฟเฟอร์
หากจำนวนพูลเธรดมากกว่า corepoolsize ในเวลานี้งานคิวบัฟเฟอร์จะเต็มและจำนวนพูลเธรดน้อยกว่า maxpoolsize ให้สร้างเธรดใหม่เพื่อจัดการงานที่เพิ่มเข้ามา
หากจำนวนในพูลเธรดมากกว่า corePoolsize ในเวลานี้งานคิวบัฟเฟอร์จะเต็มและจำนวนในพูลเธรดเท่ากับ maxpoolsize งานนี้จะถูกจัดการผ่านนโยบายที่ระบุโดยตัวจัดการ นั่นคือลำดับความสำคัญของการจัดการงานคือ: Core Thread Corepoolsize, Workqueue คิวงาน, maximumpoolsize maximumpoolsize หากทั้งสามเต็มให้ใช้ตัวจัดการเพื่อจัดการงานที่ถูกปฏิเสธ
เมื่อจำนวนเธรดในพูลเธรดมากกว่า corepoolsize หากเธรดไม่ได้ใช้งานมากกว่า keepalivetime เธรดจะถูกยกเลิก ด้วยวิธีนี้พูลเธรดสามารถปรับจำนวนเธรดในพูลแบบไดนามิกแบบไดนามิก
3. รหัสตัวอย่าง
การทดสอบ junit
@runwith (springjunit4classrunner.class) @contextconfiguration (classes = {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 (multithreadReadProcessService)); System.out.println ("int i is" + i + "ตอนนี้เธรดที่ใช้งานอยู่ Threadpool TotalNum คือ" + taskexecutor.getActiveCount ()); } ลอง {system.in.read (); } catch (ioexception e) {โยน runtimeException ใหม่ (e); -MultithReadDemo
/** * การสาธิตการประมวลผลแบบมัลติเธรดพร้อมกัน * @author daniel.zhao * */คลาสสาธารณะ MultithReadDemo ใช้ runnable {ส่วนตัว multithReadProcessService multithReadProcessService; Public MultithReadDemo () {} Public MultithReadDemo (MultIthReadProcessService MultIthReadProcessService) {this.multithReadProcessService = multithReadProcessService; } @Override โมฆะสาธารณะ Run () {MultithReadProcessService.processsomething (); -MultithReadProcessService
@ServicePublic คลาส MultIthReadProcessService {Public Static Final Logger Final Logger = logger.getLogger (MultithReadProcessService.class); / ** * กระบวนการประมวลผลเริ่มต้นใช้เวลา 1,000ms */ โมฆะสาธารณะกระบวนการ () {logger.debug ("MultithReadProcessService-ProcesssSomething" + Thread.currentThread () + "...... เริ่มต้น"); ลอง {thread.sleep (1,000); } catch (interruptedException e) {โยน runtimeException ใหม่ (E); } logger.debug ("MultithReadProcessService-ProcesssSomething" + thread.currentthread () + "...... สิ้นสุด"); -MultithReadConfig
@Configuration @componentscan (basepackages = {"com.xxx.multithread"}) @importresource (value = {"classpath: config/application-task.xml"}) @enablecheduling คลาสสาธารณะข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น