volatile原子性試験−ロック機構を用いて高同時原子性問題を解決する
5636 ワード
マルチスレッド環境ではvolatileキーワードは共有データの可視性を保証することができるが、データ操作の原子性を保証することはできない(マルチスレッド環境ではvolatile修飾変数もスレッドが安全ではない).コードテスト:
マルチスレッド環境では、データのセキュリティを保証するには、ロックメカニズムを使用する必要があります.volatileの使用シーンスイッチは、可視性の特徴を利用して、コードの実行または閉じる(例えば、今日のカリキュラムの最初のケース)を制御する. 複数のスレッドは共有変数を操作するが、1つのスレッドが書き込みを行い、他のスレッドは を読む.
ロックメカニズムを使用して高同時原子性問題を解決する:問題解決:ロックメカニズムを使用してnum++操作にロックを追加することができ、num++操作は臨界領域のコードであり、臨界領域は1つのスレッドしか実行できないため、num++は原子操作になる.テストクラス:
カスタムMyThreadクラス
// int
private volatile int count = 0 ;
マルチスレッド環境では、データのセキュリティを保証するには、ロックメカニズムを使用する必要があります.volatileの使用シーン
ロックメカニズムを使用して高同時原子性問題を解決する:問題解決:ロックメカニズムを使用してnum++操作にロックを追加することができ、num++操作は臨界領域のコードであり、臨界領域は1つのスレッドしか実行できないため、num++は原子操作になる.テストクラス:
public static void main(String[] args) throws InterruptedException {
MyThread mt = new MyThread();
mt.start();
while (true){
for (int i = 0; i < 300000; i++) {
synchronized (mt){
mt.num++;
}
}
Thread.sleep(2000);
System.out.println("num :" + mt.num);
}
}
カスタムMyThreadクラス
public class MyThread extends Thread {
int num = 0;
public void run(){
for (int i = 0; i < 300000; i++) {
synchronized (this){
num++;
}
}
System.out.println(" 。。。。");
}