一·线程同步的特征
◆不同的线程在执行以同一个对象作为锁标记的同步代码块或同步方法时,因为要获得这个对象的锁而相互牵制,多个并发线程访问同一资源的同步代码块或同步方法时。
◆同一时刻只能有一个线程进入synchronized(this)同步代码块。
◆当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定。
◆当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码如果多个线程访问的不是同一共享资源,无需同步。
提示
使用同步代码块和同步方法完成线程同步,二者的实现结果没有区别不同点:
a·同步方法便于阅读理解。
b·同步代码块更精确地限制访问区域,会更高效。
◆不同的线程在执行以同一个对象作为锁标记的同步代码块或同步方法时,因为要获得这个对象的锁而相互牵制。
◆多个并发线程访问同一资源的同步代码块或同步方法时。
◆同一时刻只能有一个线程进入synchronized(this)同步代码块。
◆当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定。
◆当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码。
◆如果多个线程访问的不是同一共享资源,无需同步。
提示
使用同步代码块和同步方法完成线程同步,二者的实现结果没有区别。
不同点
同步方法便于阅读理解。
同步代码块更精确地限制访问区域,会更高效。
同步方法:当一个对象在执行这个方法时,其他对象不允许执行。
异步方法:所有的对象都可以在同一时间来执行该方法。
二·线程安全的类型
◆如果程序所在的进程中,有多个线程同时运行,每次运行结果和单线程时运行结果是一样的,且其他变量的值也和预期相同,则当前程序是线程安全的。
◆查看ArayList类的add()方法定义。
◆ArrayList类的add()方法为非同步方法。
◆当多个线程向同一个ArrayList对象添加数据时,可能出现数据不致问题。
经验:
为达到安全性和效率的平衡,可以根据实际场景选择合适的类型。
今日总结到此结束,拜拜啦!