PS:整理自極客時間《Java併發編程》編程
1. 概述數組
2. Java內存模型緩存
3. 互斥鎖sychronized安全
class Allocator { private List<Object> als; // 一次性申請全部資源 synchronized void apply( Object from, Object to){ // 經典寫法 while(als.contains(from) || als.contains(to)){ try{ wait(); }catch(Exception e){ } } als.add(from); als.add(to); } // 歸還資源 synchronized void free( Object from, Object to){ als.remove(from); als.remove(to); notifyAll(); } }
4. 線程的生命週期多線程
6. 線程的性能指標併發
7. JDK併發包app
8. 線程池異步
1 // 簡化的線程池,僅用來講明工做原理 2 class MyThreadPool{ 3 // 利用阻塞隊列實現生產者 - 消費者模式 4 BlockingQueue<Runnable> workQueue; 5 // 保存內部工做線程 6 List<WorkerThread> threads 7 = new ArrayList<>(); 8 // 構造方法 9 MyThreadPool(int poolSize, 10 BlockingQueue<Runnable> workQueue){ 11 this.workQueue = workQueue; 12 // 建立工做線程 13 for(int idx=0; idx<poolSize; idx++){ 14 WorkerThread work = new WorkerThread(); 15 work.start(); 16 threads.add(work); 17 } 18 } 19 // 提交任務 20 void execute(Runnable command){ 21 workQueue.put(command); 22 } 23 // 工做線程負責消費任務,並執行任務 24 class WorkerThread extends Thread{ 25 public void run() { 26 // 循環取任務並執行 27 while(true){ ① 28 Runnable task = workQueue.take(); 29 task.run(); 30 } 31 } 32 } 33 } 34 35 /** 下面是使用示例 **/ 36 // 建立有界阻塞隊列 37 BlockingQueue<Runnable> workQueue = 38 new LinkedBlockingQueue<>(2); 39 // 建立線程池 40 MyThreadPool pool = new MyThreadPool( 41 10, workQueue); 42 // 提交任務 43 pool.execute(()->{ 44 System.out.println("hello"); 45 });
9. 鳥瞰並行任務分類異步編程