1.为方法加上synchronized的时候,锁的是方法还是其数据?有的书说synchronized是配在对象上的,这点不是很懂。
2.关于线程,我可以唤醒特定的线程吗?如果一个程序开了不同的线程对该数据进行操作,在系统的调动下我们不知道其位置那不是很乱吗?如果不用足够长的sleep方法好像很难为线程排序哦,求教。
2.关于线程,我可以唤醒特定的线程吗?如果一个程序开了不同的线程对该数据进行操作,在系统的调动下我们不知道其位置那不是很乱吗?如果不用足够长的sleep方法好像很难为线程排序哦,求教。
2.不能唤醒特定线程,使用yield方法,会告诉系统唤醒其他线程,但是不能告诉系统具体唤醒某一个线程,只能由系统自动分配.不过可以通过程序设置标志的方法,实现特定线程的唤醒
如果是非static方法,等价于:synchronized(this)
如果是static方法,等价于:synchronized(类名.class)//比如非static:
public synchronized void add(Object elem){
.............
}
等价于:
public void add(Object elem){
synchronized(this){
.............
}
}
//static
public class XXX{
public static synchronized void add(Object elem){
............
}
}
等价于:
public class XXX{
public static void add(Object elem){
synchronized(XXX.class){
............
}
}
}
synchronized 必须有一个对象与之关联,锁住一个对象,然后进入代码段,出了代码段,释放锁,然后别人要进入代码段,就必须先获得锁,如果别人没释放那么就进不去。