volatile原子性試験−ロック機構を用いて高同時原子性問題を解決する

5636 ワード

マルチスレッド環境ではvolatileキーワードは共有データの可視性を保証することができるが、データ操作の原子性を保証することはできない(マルチスレッド環境ではvolatile修飾変数もスレッドが安全ではない).コードテスト:
//     int     
private volatile int count = 0 ;

マルチスレッド環境では、データのセキュリティを保証するには、ロックメカニズムを使用する必要があります.volatileの使用シーン
  • スイッチは、可視性の特徴を利用して、コードの実行または閉じる(例えば、今日のカリキュラムの最初のケース)を制御する.
  • 複数のスレッドは共有変数を操作するが、1つのスレッドが書き込みを行い、他のスレッドは
  • を読む.
    ロックメカニズムを使用して高同時原子性問題を解決する:問題解決:ロックメカニズムを使用して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("      。。。。");
        }