当前位置:天才代写 > tutorial > JAVA 教程 > show一下java中的volatile的浸染

show一下java中的volatile的浸染

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:298

详细浸染就不多讲了,或许就是担保可见性和防备重排序。 其实很早前就知道有这个要害字,试过许多次,总以为加了和没加结果一样。

这次终于在阅读《java并发措施实践》(顺便义务告白一下,好书)的时候有了灵感,写了一段很普通的代码:

Java代码

public class NoVisibility {
private boolean ready=false;
int num;
private class ReaderThread extends Thread {
public void run() {
int count = 0;
while (!ready) 
{
count++;
}
System.out.println(num);
}
}

public static void main(String[] args) throws InterruptedException {
NoVisibility x = new NoVisibility();
x.new ReaderThread().start();
x.num = 43;
x.ready = true;
System.out.println("main Thread end");
}
}

再写一段python来不断地挪用它(因为不必然总能呈现),不久后就会发明不返回了,ready值的更新一直对ReaderThread线程不行见。假如ready加个volatile就不会有问题了,可以一直运行。

Python代码

import os
i=0
while True:
os.system("java -server NoVisibility")#or os.popen
i+=1
print "run count"+str(i)

感觉:

1.java运行时加参数-server用server版的虚拟机出问题几率很高,听说是server才颠末大量优化。

2.while (!ready)的轮回内假如有System.out操纵时,也险些不出问题,提高了可见性?(这个是我的揣摩)

 

    关键字:

天才代写-代写联系方式