博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多线程-原子性,有序性,可见性
阅读量:2169 次
发布时间:2019-05-01

本文共 950 字,大约阅读时间需要 3 分钟。

1:原子性

是指一个操作是不可中断的。即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。原子操作一定是线程安全的。(32位机器读取64位的数据类型也不是原子操作)

2:有序性

并发程序,在执行的时候有可能会乱序,操作系统在执行指令的时候会进行一定的优化

3: 可见性

指的是一个线程修改了共享内存的值,另一个线程是否感知的问题。

  • 比如出现指令重排后就会造成变量的可见性问题
  • 比如共享变量在多核CPU上有可能加载到不同的位置,第一个CPU读取的该值是寄存器上的,而另一个CPU是读取的缓存的值

下面来看一看网上一个虚拟机层面的可见性问题

 在server模式下面代码永远不会停止。

package com.ziwu.learn.thread;public class VisibilityTest extends  Thread {    private boolean stop;    public boolean isStop() {        return stop;    }    public void setStop(boolean stop) {        this.stop = stop;    }    @Override    public void run() {        int i = 0;        while(!stop) {            i++;        }        System.out.println("finish loop,i=" + i);    }    public static void main(String[] args) throws InterruptedException {        VisibilityTest test = new VisibilityTest();        test.start();        Thread.sleep(1000);        test.setStop(true);        Thread.sleep(2000);        System.out.println(test.isStop());    }}

 

转载地址:http://ahazb.baihongyu.com/

你可能感兴趣的文章
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>