不安定なアプリケーションのシナリオ

揮発性の
并发有三大特性:原子性,可见性,有序性
原子性:从主内存拷贝数据进工作工作中进行操作然后在把工作空间的数据写入到主内存中这个操作是属于原子性中途不可切换线程
可见性:当前线程修改的值其他线程能感知得到
有序性:代码的执行顺序是有序的,如果你不保证有序的话的话多线程并发是不安全的
volatile保证了可见性和有序性,多线程不能数据的安全

ハートビートパッケージの実装などの使用シナリオ

package com.yujie;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class VolatileTest {
    volatile static  boolean status=false;
    static Logger logger = LoggerFactory.getLogger(VolatileTest.class);
    public static void main(String[] args) throws InterruptedException {
        System.out.println("start..");
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    if(status){
                        logger.info("心跳成功");
                        status=false;
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if(!status){
                        //激活心跳
                        status=true;
                    }
                }
            }
        }).start();

    }
}

コンソールは volatile キーワードを使用せずに出力します。

start..

volatile キーワードを使用した後

start..
21:50:42.971 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:43.975 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:44.987 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:45.994 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:47.002 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:48.012 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:49.017 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:50.026 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:51.036 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:52.043 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:53.051 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:54.059 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:55.067 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:56.074 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:57.082 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:58.089 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:50:59.093 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功
21:51:00.104 [Thread-0] INFO com.yujie.VolatileTest - 心跳成功

おすすめ

転載: blog.csdn.net/qq_42058998/article/details/125452797