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=" +密码); } } }
结果如图:
3,同步锁重入
"可重入锁”的概念是:
自己可以再次活得自己的内部锁。比如有1条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可以锁重入的话,就会造成死锁。
可重入锁也支持在父子类继承的环境中:在继承中,子类是完全可以通过“可重入锁”调用父类的同步方法的。
4,出现异常,锁自动释放
线程出现异常,会释放当前线程的锁
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。