同一个类中,有两个方法都用 synchronized 修饰,这两个方法线程安全吗?
如果A,B都是实例方法(AB均用synchronized修饰),且A,B方法中都操作了类的同一个属性,那么这样会发生线程不安全吗?...
如果A,B都是实例方法(AB均用synchronized修饰),且A,B方法中都操作了类的同一个属性,那么这样会发生线程不安全吗?
展开
2个回答
展开全部
那得看你这两个方法是怎么定义的,有方法A,B ,A是实例方法,B是静态方法,前者你加上synchronized关键字的话那么你同步的实际上只是调用这个方法的对象而已,这样子的话无论怎么都不会发生线程安全的问题,除非在同一时间内多次调用这个对象多次,方法B你加上synchronized关键字的话意味着你把这个静态方法所在的类给同步了,这样子的话如果多个地方在同一时间段内要调用这个方法的话必定产生同步效果,因为在整个虚拟机内,这个类的二进制编码只有一份,在多线程中,它就是所谓的临界资源了,大家都想用它,但是又不想发生莫名其妙的数据错误,那么我肯定得同步了。而对于方法A,我前面说了,如果同一时间内多次调用这个对象的话,那么这个对象实际上就是临界资源,很多人想用,那你就排队,也只有这个时候才会发生同步效果
你A,B方法内都涉及到对同一个属性的操作的话,那么为了避免死锁,你可以用synchronized关键字配合wait(),notify()方法一起使用,如果逻辑关系处理正确的话你仍然可以让数据按照你的想象流程进行,对于初学者,逻辑控制是比较麻烦,我刚学这儿的时候也是总会出现逻辑上的错误导致程序出现死循环。
你A,B方法内都涉及到对同一个属性的操作的话,那么为了避免死锁,你可以用synchronized关键字配合wait(),notify()方法一起使用,如果逻辑关系处理正确的话你仍然可以让数据按照你的想象流程进行,对于初学者,逻辑控制是比较麻烦,我刚学这儿的时候也是总会出现逻辑上的错误导致程序出现死循环。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很遗憾,synchronized即使修饰了,还是会产生线程的不安全。
理论上,只要有两个线程和两个对象的使用不当就会引起“死锁”问题。具体我就不说了。
关键字就是“死锁”。
java没有处理死锁的机制,你的小心设计程序才行。
建议阅读Oreilly的java thread,通过设计避免死锁的发生。
理论上,只要有两个线程和两个对象的使用不当就会引起“死锁”问题。具体我就不说了。
关键字就是“死锁”。
java没有处理死锁的机制,你的小心设计程序才行。
建议阅读Oreilly的java thread,通过设计避免死锁的发生。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询