时间:2021-05-20
1、synchronized 方法与锁对象
线程锁的是对象。
1)A线程先持有 object 对象的 Lock 锁, B线程可以以异步的方式调用 object 对象中的非 synchronized 类型的方法
2)A线程先持有 object 对象的 Lock 锁, B线程如果在这时调用 object 对象中的 synchronized 类型的方法,则需要等待,也就是同步。
2、脏读(DirtyRead)
示例:
public class DirtyReadTest { public static void main(String[] args) { try { PublicVar publicVar = new PublicVar(); ThreadA thread = new ThreadA(publicVar); thread.start(); Thread.sleep(200); publicVar.getValue(); } catch (Exception e) { e.printStackTrace(); } } static class ThreadA extends Thread { private PublicVar publicVar; public ThreadA(PublicVar publicVar) { this.publicVar = publicVar; } @Override public void run() { super.run(); publicVar.setValue("B", "BB"); } } static class PublicVar { public String username = "A"; public String password = "AA"; synchronized public void setValue(String username, String password) { try { this.username = username; Thread.sleep(1000); this.password = password; System.out.println("setValue method thread name = " + Thread.currentThread().getName() + "\tusername = " + username + "\tpassword = " + password); } catch (Exception e) { e.printStackTrace(); } } // 因为 getValue 方法是非 synchronized 方法,所以造成了脏读 public void getValue() { System.out.println("getValue method thread name = " + Thread.currentThread().getName() + "\tusername = " + username + "\tpassword = " + password); } }}结果如图:
3、synchronized 锁重入
"可重入锁"的概念是:
自己可以再次活得自己的内部锁。比如有1条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可以锁重入的话,就会造成死锁。
可重入锁也支持在父子类继承的环境中:在继承中,子类是完全可以通过“可重入锁”调用父类的同步方法的。
4、出现异常,锁自动释放
线程出现异常,会释放当前线程的锁
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java中CountDownLatch进行多线程同步详解CountDownLatch介绍在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法:1
Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致性等问题。synchronized
本文主要介绍了Android多线程之同步锁的使用,分享给大家,具体如下:一、同步机制关键字synchronized对于Java来说,最常用的同步机制就是sync
java多线程-同步块Java同步块(synchronizedblock)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java
Java中synchronize函数的实例详解java中的一个类的成员函数若用synchronized来修饰,则对应同一个对象,多个线程像调用这个对象的这个同步