当前位置: 代码迷 >> Java相关 >> 同步问题
  详细解决方案

同步问题

热度:111   发布时间:2007-03-13 22:29:53.0
同步问题

public class SynTest extends Thread{
Timer t=new Timer();
public static void main(String[]args){
SynTest s1=new SynTest();
SynTest s2=new SynTest();
s1.start();
s2.start();
}
public void run(){
t.add();
}

}
class Timer{
static Object o=new Object();
private static int num=0;
public void add(){
synchronized(o){
num++;
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("you are"+num+"ss");
}
}
}
这样写可以实现同步,但是如果把同步对象换成this的话却不可以,我觉得这里应该可以,不知道到底是什么原因?


----------------解决方案--------------------------------------------------------

[此贴子已经被作者于2007-3-14 18:25:18编辑过]


----------------解决方案--------------------------------------------------------

this是当前类的对象`
你已经设置了同步对象


----------------解决方案--------------------------------------------------------
你使用0做同步对象时,因为0是静态对象,所以可以实现同步,
使用this就不一样了,this的同步对象是当前对象,而你创建了两个SynTest
而每个SynTest 都创建了t,所以同步对象就不是同一个,所以
不能同步啊!!!!

----------------解决方案--------------------------------------------------------
同步方法synchronrized()的使用方法是一个线程进入程序之后相当于给外面上了一把锁,其他线程是进不去的,只有该线程执行完之后,其他线程才可一进入,如果换成“this”的话 ,只是执行了一个线程,
----------------解决方案--------------------------------------------------------
  相关解决方案