码迷,mamicode.com
首页 > 编程语言 > 详细

Java编程思想——第21章 并发(二)

时间:2019-11-01 09:31:42      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:内存   设置   java编程   阶段   竞争   序列化   阻塞   调用   java   

三、共享受限资源

  对于并发任务,你需要某种方式来防止两个任务访问相同的资源,至少在关键阶段不能出现这种情况。

1.解决共享资源竞争

  防止这种冲突的方法就是当资源被一个任务使用时,在其上加锁。基本上所有的并发模式在解决线程冲突问题的时候,都是采用序列化访问共享资源的方案。通常这是通过在代码前面加上以挑锁语句来实现的,这使得在一段时间内只有一个任务可以运行这段代码。因为锁语句产生了一种互相排斥的效果,所以这种机制撑场成为互斥量(mutex)。

  synchronized,当代码要执行被synchronized保护的代码块时,先检查锁是否可用,再获得锁,执行代码块,释放锁。共享资源一般是以对象形式存在的内存片段,也可以是文件,I/O,打印机等。要控制对共享资源的访问,需要先把它包装进一个对象。然后把所有调用这个资源的方法标记为synchronized。如果某个任务在调用标记为synchronized的方法,那么那么在这个线程从该方法返回前,其他所有要调用类中任何标记为synchronized方法的线程都会被阻塞。

  对所有对象,自动含有单一锁,当在对象上调用其任意synchronized方法的时候,此对象都被加锁,这时该对象上的其他synchronized方法只有等到前一个方法调用完毕并释放锁后才能被调用。注意,在使用并发时,将域设置为private是非常重要的,否则,synchronized关键字就不能防止其他任务直接访问域。

  对每个类,也有一个锁。所以 synchronized static 方法可以在类的范围内防止对static数据的并发访问。

  

  

  

Java编程思想——第21章 并发(二)

标签:内存   设置   java编程   阶段   竞争   序列化   阻塞   调用   java   

原文地址:https://www.cnblogs.com/xcgShare/p/11770688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!