Java关键字,可以理解为线程锁。
实际上,synchronized(this)以及非static的synchronized方法,只能防止多个线程同时执行
同一个对象的同步代码段。
如:
public synchronized void synMethod(){
//线程获得的是成员锁,即一次只能有一个线程进入该方法
}
或者:
public Object synMethod(Object a1){
synchronized(a1){
//一次只能有一个线程进入
}
}
public void run(){
synchronized(this){//对象锁,同一个对象间控制并发
System.out.println(Thread.currentThread().getName());
}
}
以上代码表示只能用在同一个对象实体中,如果初始化多个实体,则线程锁不起作用,还是会并发执行。
而synchronized(Class.name) 或者 static synchronized,用来进行全局锁。
public void run(){
synchronized(Thread.class){//全局锁
System.out.println(Thread.currentThread().getName());
}
}
网友评论