ในช่วงสองปีที่ผ่านมาของการทำงานใน Android ผ่านการค้นคว้าซอร์สโค้ด Android ฉันจะมีความเข้าใจเกี่ยวกับการประมวลผลของมัลติเธรดมัลติเธรดที่เกิดขึ้นพร้อมกันของ Java
ดังนั้นคำถามคือวิธีการใช้พูลเธรดอนุกรม?
พูลด้ายอนุกรมคืออะไร?
กล่าวอีกนัยหนึ่งวัตถุที่รันได้ของเราควรมีกลไกคิวซึ่งเข้ามาจากหางของคิวตามลำดับและเลือก Runnable จากหัวของคิวเพื่อดำเนินการ
เนื่องจากเรามีความคิดลองพิจารณาโครงสร้างข้อมูลที่จำเป็น
เนื่องจากเรากำลังแทรกวัตถุที่รันได้จากปลายคิวและดำเนินการวัตถุที่รันได้จากหัวของคิวเราจึงต้องคิวตามธรรมชาติ SDK ของ Java ทำให้เรามีโครงสร้างข้อมูลคิวที่ดีเช่นคิวสองปลาย: ArrayDeque <Runnable>
นำเข้า java.util.arraydequ; นำเข้า java.util.concurrent.blockingqueue; นำเข้า java.util.concurrent.linkedblockingDeque; นำเข้า java.util.concurrent.threadfactory; นำเข้า java.util.concurrent.threadpoolexecutor; java.util.concurrent.atomic.atomicinteger;/*** สร้างโดย WZY เมื่อวันที่ 16-1-5 */คลาสสาธารณะ serialexecutor {ส่วนตัว runnable mactive; Private ArrayDequ <Runnable> marraydequ = new ArrayDequ <> (); INT สุดท้ายคงที่ int cpu_count = runtime.getRuntime (). arableprocessors (); INT int สุดท้ายของส่วนตัว core_pool_size = cpu_count + 1; INT สุดท้ายคงที่ INT สูงสุด maximum_pool_size = cpu_count * 2 + 1; INT สุดท้ายคงที่ int keep_alive = 1; การปิดกั้นครั้งสุดท้ายของเอกชนครั้งสุดท้าย <runnable> SpoolworkQueue = ใหม่ LinkedBlockingDeque <> (128); private static final threadfactory sthreadfactory = new ThreadFactory () {ส่วนตัวสุดท้าย Atomicinteger Mcount = ใหม่ Atomicinteger (1); @Override เธรดสาธารณะ newThread (runnable r) {ส่งคืนเธรดใหม่ (r, "เธรดอนุกรม #" + mcount.getandincrement ()); - Private Static Final Threadpoolexecutor Thread_executor = ใหม่ Threadpoolexecutor (core_pool_size, maximum_pool_size, keep_alive, timeunit.seconds, Spoolworkqueue, sthreadfactory); โมฆะที่ซิงโครไนซ์สาธารณะดำเนินการ (ขั้นสุดท้าย runnable r) {marraydequ.offer (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {ลอง {r.run ();} ในที่สุด {Schedulenext ();}}}); // เมื่อครั้งแรกที่คุณเข้าร่วมคิว mactive ว่างเปล่าดังนั้นคุณต้องโทรหาเมธอด schedulenext ด้วยตนเองถ้า (mactive == null) {schedulenext (); }} โมฆะส่วนตัว Schedulenext () {ถ้า ((mactive = marraydequ.poll ())! = null) {thread_executor.execute (mactive); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {serialexecutor serialexecutor = ใหม่ serialexecutor (); สำหรับ (int i = 0; i <10; i ++) {final int j = i; serialexecutor.execute (ใหม่ runnable () {@Override public void run () {system.out.println ("num คือ:" + (j + 1)); ลอง {thread.sleep (1000);} catch -ผลการดำเนินการมีดังนี้:
NUM คือ: 1
NUM คือ: 2
NUM คือ: 3
NUM คือ: 4
NUM คือ: 5
NUM คือ: 6
NUM คือ: 7
NUM คือ: 8
num คือ: 9
NUM คือ: 10
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการวิเคราะห์อินสแตนซ์สระว่ายน้ำแบบอนุกรมของการเกิดขึ้นพร้อมกันของ Java และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!