yxhxj2006

常用链接

统计

最新评论

同步静态方法

问:当定义了方法A和方法B,当实例化类后,多线程如何保证调用方法A时方法B即使被调用也不会被执行?Java有保证这种机制的关键字吗?

答:用 synchronized 搜索修饰方法   例如: 
public class O
{
public synchronized void A(){}
public synchronized void B(){}
}
同一个类中的所有synchronized修饰的方法是不能同时调用的,也就是说同时只能调用其中一个方法,比如线程1调用A方法,在A方法执行完之前,线程2调用B方法,这个时候线程2就会阻塞,直到线程1调用完A方法后,线程2才开始执行B方法!

还有一个解决方法就是加一个同步对象锁

public class O
{
Object lock;
public void A()
{
synchronized(lock)
{
//这里写方法内容
}
}
public void B()
{
synchronized(lock)
{
//这里写方法内容
}
}
}


注意:同一个类中所有的同步的静态方法,它们在类范围类是同步的,也就是同一时间只能有一个线程可以访问所有同步静态方法中的一个。

 

不同类中的静态同步方法互不影响。前面所说,静态同步方法是类级别的,也就是以类为单位进行控制的。如果两个线程访问不同类中的同步方法,这两个线程是不需要等待的,即使是静态方法。





posted on 2013-11-06 19:29 奋斗成就男人 阅读(319) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: