博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解线程同步
阅读量:6365 次
发布时间:2019-06-23

本文共 485 字,大约阅读时间需要 1 分钟。

 

1、首先确定一点:同步安全,异步不安全。

2、结合实例,针对下面的使用场景:妈妈做蛋糕给儿子吃。

3、需求分析:

(a)蛋糕的数量是共享数据,应该放入临界区。

(b)妈妈做蛋糕的时候,儿子不能吃;儿子吃蛋糕的时候,妈妈不能做。

(c)假设儿子很饿,妈妈做一个,儿子吃一个,妈妈做好一个后,等待儿子去吃,吃完后再去做,但是,如果儿子贪玩,很长时间都没吃完一个蛋糕,妈妈就不管了。继续做蛋糕。

(d)有一点是肯定的:必须要蛋糕,儿子才能吃,也就是说,如果蛋糕没了,儿子必须等待妈妈做好蛋糕,并且必须一直等下去,知道妈妈做出蛋糕。

(e)妈妈做好蛋糕后,通知儿子吃蛋糕;儿子吃完蛋糕后,通知妈妈继续做蛋糕。

注意:为了避免当前线程一直等下去,也就是出现死锁,有两个办法:

1、当前线程调用Monitor.Wait(sync,5000); 加上时间限制,等待超时,就不等了,进入就绪状态,准备执行。

2、互斥的线程调用Monitor.Pulse(sync); 通知当前线程。

转载于:https://www.cnblogs.com/java2016/p/5537986.html

你可能感兴趣的文章
Open Source Databases Comparison
查看>>
sprintf,你知道多少?
查看>>
[转]java 自动装箱与拆箱
查看>>
NET的堆和栈04,对托管和非托管资源的垃圾回收以及内存分配
查看>>
think in coding
查看>>
IdHttpServer实现webservice
查看>>
HTML的音频和视频
查看>>
Unsupported major.minor version 52.0
查看>>
面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
查看>>
优酷网架构学习笔记
查看>>
把HDFS里的json数据转换成csv格式
查看>>
WEEX-EROS | 集成并使用 bindingx
查看>>
Spring5源码解析-Spring中的异步和计划任务
查看>>
广州牵引力来告诉你学编程先学什么语言好?
查看>>
广州牵引力总结初学者怎样学好UI设计?
查看>>
使用Metrics方法级远程监控Java程序
查看>>
Spring核心系列之Bean的生命周期
查看>>
VasSonic源码之并行加载
查看>>
小程序 LRU 存储设计
查看>>
Android 多线程之阻塞队列
查看>>