猿问

JAVA加锁过程中遇到的问题

publicclassTextSyncimplementsRunnable{
/**
*@Vesine
*多线程锁问题程序
*2014年12月23日15:47:32
*/
Timertimer=newTimer();
publicstaticvoidmain(String[]args){
Threadt1=newThread(newTextSync());
Threadt2=newThread(newTextSync());
t1.setName("MYThread1");
t2.setName("MYThread2");
t1.start();
t2.start();
}
publicvoidrun(){
timer.add(Thread.currentThread().getName());
}
}
publicclassTimer{
privatestaticintnum=0;
publicsynchronizedvoidadd(Stringname){
num++;
try{
Thread.sleep(1);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println(name+":你是第"+num+"个访问线程");
}
}
为什么加锁后程序运行结果仍为
MYThread1:你是第2个访问线程
MYThread2:你是第2个访问线程
慕丝7291255
浏览 337回答 2
2回答

HUX布斯

synchronized修饰方法时“同时只能有一个线程访问当前方法”针对的是同一个对象。你的例子里,每个TextSync都new了自己的Timer,不是同一个对象,synchronized修饰的方法同一时间只有自己的TextSync会访问,所以根本不存在锁竞争。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答