Java多线程系列(3)--解决共享资源竞争synchronized
来源:互联网 发布:直播软件xsplit 编辑:程序博客网 时间:2024/04/30 12:56
一、对于共享资源竞争的场景描述
依据Java编程思想中所给出的例子:你坐在桌边手拿叉子,正要去叉盘子中的最后一片食物,当你的叉子就要够着它时,这片食物突然消失了,因为你的线程被挂起了,而另一个用餐者进入并吃掉了它。这正是编写并发程序时需要处理的问题。对于并发工作,你需要某种方式来防止两个任务访问相同的资源,至少在关键阶段不能出现这种情况。防止这种冲突的方法:当资源被一个任务使用时,在其上加锁。第一个访问某项资源的任务必须锁定这项资源,是其它任务在其被解锁之前,就无法访问它了,而在其被解锁时,另一个任务就可以锁定并使用它。基本上所有的并发模式在解决多线程冲突问题时,都是采用序列化访问共享资源的方案。意味着在给定时刻只允许一个任务访问共享资源。通常这是通过在代码前面加上一条锁语句实现的,这就使得在一段时间内只有一个任务可以运行这段代码。因为锁语句产生了一种互相排斥的效果,所以这种机制常常被称为互斥量。Java以提供关键字synchronized的形式,为防止资源冲突提供了内置支持,当任务要执行被synchronized关键字保护的代码片段时,它将检查锁是否可用,然后获取锁,执行代码,释放锁。
上面介绍的是Java编程思想中部分内容,在此列出,便于理解多线程中解决共享资源竞争的方法。
二、认识synchronized关键字三条使用原则:
(1)当一个线程访问某对象的synchronized方法或者synchronized代码块时,其它线程对这个对象的这个synchronized方法或者synchronized代码块的访问将被阻塞。
(2)当一个线程访问某对象的synchronized方法或者synchronized代码块时,其它线程仍然可以访问该对象的非同步代码块。
(3)当一个线程访问某对象的synchronized方法或者synchronized代码块时,其它线程对该对象的其它的synchronized方法或者synchronized代码块的访问将被阻塞。
0 0
- Java多线程系列(3)--解决共享资源竞争synchronized
- java多线程(二)解决共享资源竞争
- 【think in java】 解决共享资源竞争
- Java多线程 之 访问共享资源synchronized、lock(七)
- Java多线程、并发时使用Synchronized(同步锁)解决资源竞争问题
- (28)21.3.2 解决共享资源竞争---Java编程思想之并发笔记
- 解决多线程 共享资源
- Java多线程系列5(synchronized)
- 解决线程间对共享资源的竞争
- Java多线程系列03----synchronized
- java多线程系列四:synchronized
- Java多线程干货系列--------synchronized
- Java多线程 之 访问共享资源(六)
- Java多线程之共享资源
- java多线程之共享资源
- 玩玩Java多线程共享资源
- Java多线程共享资源
- Java多线程共享资源
- 谷哥的小弟学后台(23)——Listener
- 自顶向下(一)——计算机网络与英特网
- PowerShell文件系统(一)前言
- Using closures as objects in R
- ASP.NET MVC+EasyUI+三层工厂模式 实现权限管理系统
- Java多线程系列(3)--解决共享资源竞争synchronized
- 图的基本存储的基本方式三
- Jquery的Table
- 常见面试点
- 【python】使用中科院NLPIR分词工具进行mysql数据分词
- 使用Date和SimpleDateFormat类表示时间
- python小知识
- windows 7 下如何搭建爬虫框架scrapy
- 贪心算法专题(1)--HDU1009