刚开始学多线程,今天在网上看到了下面这个例子,给出的解释是 static 的锁是在 Counter.class 里,非 static 的锁是在 this object 里,它们两个可以同时使用,所以会导致线程不安全。我想问的是在什么样的具体实例里调用这两个方法会导致线程不安全,比如我有线程 1 和线程 2,我想让线程 1 调用 setter,然后线程 2 再调用 getter。在这种情况下,就算都上 static synchoronized 锁,我也不能保证调度器一定先调用线程 1,再调用线程 2 啊?跟不上锁有什么区别?我可以都不上锁,然后调用线程 1 执行 setter,再调用线程 2 执行 getter。
求大佬们指点!!多谢了!
代码如下:
public class Counter{
private static int count = 0;
public static synchronized int getCount(){
return count;
}
public synchoronized setCount(int count){
this.count = count;
}
}
原文 link:
https://javarevisited.blogspot.com/2011/04/synchronization-in-java-synchronized.html
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/514393
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.