话说日子一天天过去,小年轻涉足多线程快要超两个小时总计时了。
随着上次匿名内部类 需要final修饰 的问题 寻找结束,其实当时还涉及到另一个问题。
当时小年轻是为了 研究一下volatile的可见性在多线程当中的应用来操作代码的。
说到这里,就要说一说一这个多线程会遇到的一些问题。
首先,我们知道当一个线程运行到中途时突然睡眠了 ,这是另一个线程其实是可以运行的,并且可以使用第一个线程所使用的变量。
但是如果这个变量是不可见的 ,那么另一个线程就不会知道变量是否在第一个线程中数据已经改变,迭戈线程如果后面改变了第一个线程的中变量的值,第一个线程也不知道。这样数据就不符合事实,完全不符合全球知识共享的现实,这可不行
这个时候变量的可见性就十分重要,所以volatile就出现了 。
经过volatile修饰的变量会变得在具有可见性,所以无论是第一个线程还是第二个线程都能随时看到变量值的改变。
以上内容就是本文最核心知识了,接下来就是小年轻自己的问题: 无需关看
接下来就是问题出现的时候了:
```java
在这里插入代码片
public class VolatieTest {
volatile boolean run=true;
void m(){
System.out.println("m start");
while(run){
try {
//睡十秒 让另一个线程可以在这段时间启动,会改变变量的值
TimeUnit.SECONDS.sleep(10);