为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA中synchronized的疑问?

JAVA中synchronized的疑问?

RISEBY 2019-04-13 08:46:15
对于线程并发的数据同步,JAVA提供了synchronized供选择。加了synchronized方法或者代码块儿,如果一个线程进入synchronized,那么这个线程获得对应对象的锁,其他线程只能等待获取这个对象的锁。对于线程中锁,最重要的两点是确定锁的对象是谁,谁持有了锁。我相信上面的理解应该没有错吧,那么对于下面的代码有一些疑问,伪代码:publicclassTestThreadimplementsRunnable{publicstaticObjecto1=newLong(-1);publicstaticObjecto2=newLong(-2);@Overridepublicvoidrun(){synchronized(o1){System.out.println("Iamo1:"+Thread.currentThread().getName());}synchronized(o2){System.out.println("Iamo2:"+Thread.currentThread().getName());}}}staticExecutorServiceexecutorService=Executors.newFixedThreadPool(3);publicstaticvoidmain(String[]args){executorService.submit(newTestThread());executorService.submit(newTestThread());executorService.submit(newTestThread());executorService.shutdown();}现在创建了三个线程,每个线程执行到synchronized后,其他线程都要等待。我的问题是:1.创建了三个线程,每个线程中o1、o2都是不同的对象。根据我的理解,线程获取到的都是不同对象的锁,因此线程执行到synchronized代码块儿,其他程序执行到同样地方都拿到的是不同对象的锁,理应不会发生等待的。是我的那里理解的有问题吗?
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

publicstaticObjecto1=newLong(-1);
publicstaticObjecto2=newLong(-2);
注意定义中的static
                            
查看完整回答
反对 回复 2019-04-13
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

是阻塞,以为是static修饰的变量,去掉static就是并行允许
publicclassTestThreadimplementsRunnable{
publicstaticObjecto1=newLong(-1);
publicstaticIntegernum=newInteger(0);
staticExecutorServiceexecutorService=Executors.newFixedThreadPool(3);
publicvoidrun(){
synchronized(o1){
num++;
System.out.println("Iam:"+num+"======"+Thread.currentThread().getName());
}
}
publicstaticvoidmain(String[]args){
for(inti=0;i<10;i++){
executorService.submit(newTestThread());
}
executorService.shutdown();
}
}
======运行结果==========
Iam:1======pool-1-thread-1Iam:2======pool-1-thread-1Iam:3======pool-1-thread-3Iam:4======pool-1-thread-3Iam:5======pool-1-thread-2Iam:6======pool-1-thread-3Iam:7======pool-1-thread-1Iam:8======pool-1-thread-3Iam:9======pool-1-thread-1Iam:10======pool-1-thread-2
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 301 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信