例如一个类
class Timer{
static int num = 0;
public void add(string name){
num ++;
system.out.println("这是第"+num+"个访问此方法的线程");
}
}
Timer timer = new Timer();
如果不使用线程同步,当两个线程都调用这个对象timer的add方法时,就有可能出现错误的结果,如果使用同步,也即可以这样用
class Timer{
static int num = 0;
public void add(string name){
synchronized(this){
num ++;
system.out.println("这是第"+num+"个访问此方法的线程");
}
}
}
表示是对当前对象加锁,也即在同一时刻,只能有一个对象访问这个对象
还有一种简便的写法
class Timer{
static int num = 0;
public synchronized void add(string name){
num ++;
system.out.println("这是第"+num+"个访问此方法的线程");
}
}
和上面那种是一样的效果,而不是通常理解的对这一个方法同步。
wait()方法是释放锁的方法,也就是说可以等待下一个线程完成之后再运行,前提条件是必须能获得本对象的锁,因为,不获得锁也就无所谓释放了!