Java多线程同步同步方法详解

  

1,同步的方法与锁对象

  

线程锁的是对象。

  

1)线程先持有对象对象的锁锁,B线程可以以异步的方式调用对象对象中的非同步类型的方法

  

2)线程先持有对象对象的锁锁,B线程如果在这时调用对象对象中的同步类型的方法,则需要等待,也就是同步。

  

2、脏读(DirtyRead)

  

示例:         公开课DirtyReadTest {   公共静态void main (String [] args) {   尝试{   PublicVar PublicVar=new PublicVar ();   ThreadA线程=new ThreadA (publicVar);   thread.start ();   thread . sleep (200);   publicVar.getValue ();   }捕捉(异常e) {   e.printStackTrace ();   }   }      静态类ThreadA延伸线{   私人PublicVar PublicVar;      公共ThreadA (PublicVar PublicVar) {   这一点。publicVar=publicVar;   }      @Override   公共空间run () {   super.run ();   publicVar。setValue (" B ", " BB ");   }   }      静态类PublicVar {   公共字符串的用户名=癆”;   公共字符串密码=癆A”;      同步公共空setValue(用户名的字符串,字符串密码){   尝试{   这一点。用户名=用户名;   thread . sleep (1000);   这一点。密码=密码;   system . out。println (" setValue方法线程名称=" + Thread.currentThread () . getname () + " \ tusername=" +用户名+“\ tpassword=" +密码);   }捕捉(异常e) {   e.printStackTrace ();   }   }//因为getValue方法是非同步的方法,所以造成了脏读   公共空间getValue () {   system . out。println (" getValue方法线程名称=" + Thread.currentThread () . getname () + " \ tusername=" +用户名+“\ tpassword=" +密码);   }   }   }      

结果如图:

  

癑ava多线程同步同步方法详解"

  

3,同步锁重入

  

"可重入锁”的概念是:

  

自己可以再次活得自己的内部锁。比如有1条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可以锁重入的话,就会造成死锁。

  

可重入锁也支持在父子类继承的环境中:在继承中,子类是完全可以通过“可重入锁”调用父类的同步方法的。

  

4,出现异常,锁自动释放

  

线程出现异常,会释放当前线程的锁

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Java多线程同步同步方法详解