通過控制併發的工具類,幫助程式設計師更容易讓程式之間相互合作,來滿足業務邏輯
* 質檢,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執行除外,而非空流為乙個非同步流,其上所有的操作都不堵塞主機執行。而非空流按照與空流直接的關係還可分為兩種型別 非空流中的堵塞和非堵塞主要是針對與空流之前的關係...