欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

访问共享的可变数据时要进行同步

程序员文章站 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 它能帮助我们写出更加安全的代码访问共享的可变数据时要进行同步