synchronized 锁住的是对象!! 一定是所有线程间共享的同一个对象!!!!
今天在写多线程代码的时候,找了好久的一个bug,
下面是错误代码
package mianshi;
public class threadTest {
private Integer product = 5;
// private String product = "lock";
public static void main(String[] args) {
threadTest t = new threadTest();
new Thread(t.new Product(), "Producter1").start();
new Thread(t.new Consumer(), "Consumer1").start();
new Thread(t.new Product(), "Producter2").start();
new Thread(t.new Consumer(), "Consumer2").start();
}
class Product implements Runnable {
@Override
public void run() {
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (product

本文探讨了在使用JAVA多线程时,synchronized关键字锁对象的常见误区。错误示例中,由于Integer类型的包装特性,导致线程间锁定的对象并非同一实例,从而引发问题。解决方案是确保锁定的是线程共享的同一对象,并提醒在条件判断中使用while避免虚假唤醒。
最低0.47元/天 解锁文章
695

被折叠的 条评论
为什么被折叠?



