三大经典同步问题——Java代码实现(信号量模拟)

三大经典同步问题——Java代码实现(信号量模拟)

 

一、代码结构说明

 源码:https://github.com/986204478/Test/tree/master/synchronization/src

1、common包

①JavaSynchronizationTest.java 简单介绍了信号量机制在Java里面的实现:结合synchronized关键字和对象锁机制

/**

 * PV测试:PV代码直接写的话是无法保证原子性操作的

 *

 * 还有Integer好像不是线程安全的

 *

 * 代码功能2个进程(线程)把buffer累加到20万

 *

 * 多线程模拟多进程

 *

 * @author 98620

 *

 */

 

 

 

②然后PV.java 和Signal.java就具体实现了 信号量机制的底层操作

 

 

 

2、接下来的三个包就分别用不同的方法解决个对应的三个经典同步问题

 

3、所有源码见:github….

 

 

 

 

二、经典同步问题1—生产者消费者模型

1、实现1 Test1RecordSignal.java

/**

 * @author 98620 模拟记录型信号量 解决生产者消费者问题用线程的并发来模拟进程的并发

 * 注意:

 * 互斥和同步信号量的原语必须成对出现。

 * signal操作的次序无关紧要,但wait操作的次序不能颠倒,否则会造成死锁

 *

 */

 

2、实现2Test2And。java

/**

 * @author 98620 模拟And型信号量 解决生产者消费者问题 用线程的并发来模拟进程的并发

 */

 

三、经典同步问题2—哲学家进餐

 


 

1、And信号量实现  Test1And.java

 

2、Test2AtMostFour.java

/**

 * @author 98620 最多允许4个哲学家同时拿左边的筷子 来解决哲学家进餐问题

 *

 */

 

3、Test3OddLeft.java

/**

 * @author 98620 奇数号哲学家先拿左边的筷子再拿右边,偶数相反

 *

 */

 

 

四、经典同步问题3—读者写者问题

1、Test1Occupied.java

 

/**

 * @author 98620 教材上的解法

 *

 * 通过阅读人数来占据写信号量:

 * 如果读的人数>0那么就占据【写信号量】,如果读的人数==0那么就释放【写信号量】

 *

 */

 

2、Test2.java

/**

 * @author 98620 自定义锁机制的解法

 * 读:没有人在写就可以读 否则就等待

 * 写:没有人在写 且 没人在读的时候就可以写  否则就等待

 */

 

 

五、附件

 

<<synchronization.zip>>

 

 


  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值