java.util.concurrent
パッケージ、一般的に、このパッケージで使用される並行プログラミングツールの増加(JUCと呼ばれる)
を含む同様のスレッドを定義するためのカスタム・サブシステム线程池
、异步 IO
および轻量级任务框架
、マルチスレッドコンテキストのデザインを提供
するCollection实现
ように
volatile、synchronized 和 final 实现可见性。
synchronized 和在 lock、unlock 中操作保证原子性。
volatile 和 synchronized 两个关键字来保证线程之间操作的有序性
volatileキーワード
private volatile int account = 100;
synchronized也能保证可见性,但是效率低
volatileキーワードは、ドメイン変数へのロックフリーアクセス、より軽量な同期化戦略のためのメカニズムを提供します。
- 揮発性の変数があります
可见性
。揮発性変数としない、すなわち、直接メモリを変更し、代わりに、レジスタの値を使用して、スレッド内部キャッシュの順序を変更することができ - 揮発性アトミック操作を提供していない、変数の最終的な種類を変更するために使用することができません
- 「排他的」を持っていない揮発性
注:揮発性の修正のみ、彼は満足してみましょう具有可见性
、しかし、不能保证它具有原子性
そのようにvolatile int a = 0;
した後、操作ありa++;
、この変数は、可視性を持っていますが、a++
まだ非アトミック操作である、
つまり、この操作はまた、スレッドの安全性の問題が存在します。
I ++
java.util.concurrent.atomic
パッケージの下では、それは一般的なアトミック変数を提供します
private AtomicInteger serialNumber = new AtomicInteger();
// 自增运算
serialNumber.getAndIncrement();