控制併發流程

2021-10-24 11:14:13 字數 2884 閱讀 1214

通過控制併發的工具類,幫助程式設計師更容易讓程式之間相互合作,來滿足業務邏輯

* 質檢,5個工人檢查,所有都通過,才通過檢查

*/public class countdownlatchdemo1 catch (interruptedexception e) finally }};

service.submit(runnable);

}system.out.println("等待5個人檢查");

latch.await();

system.out.println("所有人都完成了工作,進入下乙個環節");}}

/**

* 模擬100公尺跑步,5名運動員都準備好,只等裁判一聲令下,所有人同時開始跑步

*/public class countdownlatchdemo2 catch (interruptedexception e) }};

executorservice.submit(runnable);

}thread.sleep(5000);

system.out.println("發令槍響");

begin.countdown();}}

/**

* 模擬100公尺跑步,5名運動員都準備好,只等裁判一聲令下,所有人同時開始跑步

* 當所有人都到終點後,比賽結束

*/public class countdownlatchdemo3 catch (interruptedexception e) finally }};

executorservice.submit(runnable);

}thread.sleep(5000);

system.out.println("發令槍響,比賽開始。");

begin.countdown();

end.await();

system.out.println("所有人都到達,比賽結束。");}}

* 演示semaphore用法

*/public class semaphoredemo

service.shutdown();

}static class task implements runnable catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "拿到了許可證");

try catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "釋放了許可證");

semaphore.release();}}

}

/**

* 演示condition基本用法

*/public class conditiondemo1 finally

}void method2() finally

}public static void main(string args) throws interruptedexception catch (interruptedexception e)

}}).start();

conditiondemo1.method1();}}

/**

* 演示condition實現生產者消費者模式

*/public class conditiondemo2

class consumer extends thread

private void consumer() catch (interruptedexception e)

}queue.poll();

notfull.signalall();

system.out.println("從佇列裡取走乙個資料,剩下 " + queue.size() + "個資料");

} finally }}

}class producer extends thread

private void producer() catch (interruptedexception e)

}queue.offer(1);

notempty.signalall();

system.out.println("向佇列裡插入了乙個元素,剩下 " + (queuesize - queue.size()) + "個資料");

} finally }}

}}

/**

* 演示cyclicbarrier

*/public class cyclicbarrierdemo

});for (int i = 0; i < 10; i++)

}static class task implements runnable

@override

public void run() catch (brokenbarrierexception e) catch (interruptedexception e) }}

}

控制併發流程

控制併發流程的工具類,讓執行緒之間相互合作。比如讓執行緒a等待執行緒b執行完再執行合作策略 用來限制有限資源的使用情況 初始化semaphore指定許可證的數量 acquire獲取許可證 release釋放許可證 tryacquire timeout 檢查有沒有空閒的許可證,不阻塞 等到所有執行緒都...

併發流程工具CountDownLatch解析

countdownlatch是乙個執行緒併發流程工具,它允許乙個或者多個執行緒阻塞直到一些執行緒執行完畢,才會繼續執行,countdownlatch會存在乙個計數器,當 await方法呼叫,那麼後面的執行緒都會被阻塞,直到由於countdown 方法的呼叫而導致當前計數達到零,後續被阻塞的執行緒才會...

CUDA 網格級併發 流 2

上節中描述到cuda中可以通過流來實現網格級併發,按照流的劃分主要分為兩種 空流為乙個同步流,在空流中的大部分操作都會堵塞主機,kernel執行除外,而非空流為乙個非同步流,其上所有的操作都不堵塞主機執行。而非空流按照與空流直接的關係還可分為兩種型別 非空流中的堵塞和非堵塞主要是針對與空流之前的關係...