解决方案 »
- 有关控制台输入,求大神指教
- 用jasperreport的函数JRXmlLoader.load读取xml文件,总是抛出以下异常
- 各位老大,问一个关于UDP的问题
- 求一个JAVA读和写EXCEL文件的类
- 我是新手,问大家几个问题,谢谢了!!
- 寻找我的挚爱!!!
- this.getClass().getResource(imagePath)这是一种什么样的定位资源的方法?谢谢,给分!
- <form>中的action到底是属于转发还是重定向?
- 请问我如何用程序获取系统classpath路径的内容
- 怎么把java.io.OutputStream outputStream写到一个String中去?
- java quartz框架 第一次执行时间会延迟
- 请问:如何通过按钮来更改标签的图片
这里如果去掉volatile,MonitorThread可能在t.setName("测试");之前(或者尽管执行了setName但是还未刷到主存)读取testArray放到自身线程的工作栈中,所以看到的是过期的值。可以把MonitorThread的run方法改为如下形式:
public void run() {
try {
Thread.sleep(5000);
} catch (Exception e) {
}
while (true) {
}
}
这时InitThread线程可以在MonitorThread读取之前执行t.setName("测试");(并有更大的希望刷新到主存)因此MonitorThread可以读取到最新的值而能顺利结束。
本人菜鸟,希望大神指正