Java SE应用部分25多线程03.docx
- 文档编号:26405675
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:16
- 大小:1.49MB
Java SE应用部分25多线程03.docx
《Java SE应用部分25多线程03.docx》由会员分享,可在线阅读,更多相关《Java SE应用部分25多线程03.docx(16页珍藏版)》请在冰豆网上搜索。
JavaSE应用部分25多线程03
JavaSE应用部分-25.多线程(03)
上季内容回顾:
线程的一些其他操作方法:
·线程的休眠:
Thread.sleep();
本季主要知识点:
题目讲解、其他的操作方法、同步与死锁的操作
多线程习题:
分两种方式完成:
1、使用Thread类完成。
看下效果:
2、通过Runnable接口实现
效果如下:
中断线程的运行
看下效果:
程序执行太快了,我们再修改下程序
看下效果:
程序休眠8秒后中断
最好可以让代码返回到被调用处
现在E-->run方法执行完毕就没有输出
现在我们互换下程序休眠的时间看看效果
OK,看下效果,此时程序休眠没被中断哈~!
查看线程的中断状态
看一下这个程序的线程名字:
main
下面我们测试中断状态
看下效果:
显示线程没有中断
下面我们加入一个线程中断
这时看下程序效果:
显示线程中断了
接着看下线程能否进入休眠状态
发现线程不能被休眠
查看下现在中断状态又是什么呢?
发现没有被中断哈~
多线程问题--资源协调(重点)
北京的一列火车,会有多个订票点卖票,证明,所有的订票点每一个都是一个线程,所有的线程共同卖一套票。
验证下效果:
此处是没有任何延迟的情况下,暂时出现了正确的结果,下面我们来模拟下网络的延迟情况下程序的执行效果(比如延迟0.1秒)
解决这个问题我们需要使用到数据同步
同步代码块
Java程序中分为四种代码块:
·普通代码块
·构造块
·static静态块
·同步代码块
使用关键字:
synchronized
哈~~~程序执行没有负数出现,但是好像票都被Thread-0卖光了哈~~~
同步代码块加错位置,应加在程序判断位置
看下效果,没有问题了:
同步方法:
使用synchronized声明的方法就叫同步方法
此代码中卖票将判断与ticket--放在一起操作,我们判断下效果:
效果一样哈~
多个线程共享同一个资源,肯定是需要同步的,以保证数据的正确性,但是同步是需要牺牲性能的。
同步会有新的问题:
张三-->李四|
张三的哥哥-->王五
李四-->拿出500W救出你弟弟
王五-->把弟弟放了,我给你500W
因为同步造成了两个人的状态停滞-->死锁
模拟一个死锁的情况来看:
我们发现程序不向下执行了,死锁了哈~~~
如果假设其中一个松口了,会怎么样?
看下效果:
交易成交哈~~~
总结
目的:
阐述概念:
多个线程共享同一个资源的时候,必须进行同步,但是过多的同步会造成系统的死锁
同步的关键字:
synchronized
同步代码块中必须有一个需要同步的对象,一般都为当前对象——this。
#######################################################
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java SE应用部分25多线程03 SE 应用 部分 25 多线程 03