每日一题(五)
问题:
java线程同步实现的方法有哪几种
分析:
java实现同步主要使用synchronized关键字,同时伴随使用的有wait().sleep().notify().Allnotify()方法
解答:
java同步方式有两种:同步方法和同步块。
1.同步方法
给一个方法增加synchronized关键字就可以使它成为同步方法,方法可以是静态方法和非静态方法。但是不能是尚未实现的方法(抽象方法与接口方法)。
eg1.
public void run(){synchronized(this){//do something.}}
原理:synchronized的目的是使同一个对象的多个线程进行同步。
每个对象都有一个“锁标志”。当这个对象的一个线程访问某个synchronized的数据时,所有的synchronized数据都会上锁。因为“锁标志”被当前线程带走。
如果对静态方法(包含静态块),网上有篇文章是这样解释的“那么线程锁定的就不是这个类的对象了,也不是这个类自身,而是这个类对应的java.lang.Class类型的对象。同步方法和同步块之间的相互制约只限于同一个对象之间,所以静态同步方法只受它所属类的其它静态同步方法的制约,而跟这个类的实例(对象)没有关系。”这里其实就是指的类对象(用于实例化其他对象)。