Min*_*ine 0 java concurrency multithreading
2个问题:
class A implements Runnable {
String str = "hello"; // line 2.
public void run(){
Synchronized(str){
System.out.println(str+" "+Thread.currentThread().getName());
Thread.sleep(100);
System.out.println(str+" "+Thread.currentThread().getName());
//anything
}
}
public void static main(String[] args){
Thread one = new Thread(new A(),"one").start();
Thread two = new Thread(new A(),"two").start();
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
字段本身不在两个实例之间共享.他们是不同的领域.但是,它们以相同的值开始,因为字符串文字被实习.
这意味着当synchronized块在一个线程中获取字符串的监视器时,它将阻止另一个线程获取同一个监视器.重要的是要理解synchronized块正在获取与字段值相关联的监视器的锁定- 涉及两个单独的字段并不重要.
道德:不要在字符串上同步,尤其是文字.文字特别糟糕,因为在这种情况下,您可以使用具有相同代码的另一个类A,并且还尝试使用相同的监视器进行同步.
| 归档时间: |
|
| 查看次数: |
6559 次 |
| 最近记录: |