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”的话 ,只是执行了一个线程,
----------------解决方案--------------------------------------------------------