访问共享的可变数据时要进行同步
程序员文章站
2022-07-12 18:00:00
...
同步的作用:
- 提供互斥访问
- 提供线程之间的可靠通信
大家看下面的代码:
public class StopThreadDemo {
// no synchronize or volatile
private static boolean shouldStop;
public static void main(String[] args) throws InterruptedException {
Thread firstThread = new Thread(new Runnable() {
public void run() {
int counter = 0;
while (!shouldStop) {
counter++;
System.out.println(counter);
}
}
});
firstThread.start();
TimeUnit.SECONDS.sleep(1);
shouldStop = true;
}
}
在某些环境下后台线程(firstThread)并没有在运行一秒左右后正确的停止(某些环境下也能正常停止比如eclipse + jdk 1.6_16) 但是更加安全的做法是是用volitale或者同步shouldStop的读写 操作,只有这样我们才能保证firstThread 收到了should stop it !的请求。
我们应该学习和考虑使用java currennt util package中已经提供的功能比如atomicLong .... etc 它能帮助我们写出更加安全的代码
上一篇: C++ STL标准模板库