多线程_线程同步小程序
来源:互联网 发布:苹果mac 镜像下载 编辑:程序博客网 时间:2024/05/17 15:42
1:需求:子线程执行10次,主线程执行100次,再子线程10次,主线程100次,如此的往复50次。
2为了方便看结果,先把次数改成10次,10次,10次。
3总结:
①互斥:同一块代码的原子性操作,不容其它代码打乱
②同步:不同代码块之间,在互斥的基础上,按照顺序执行 ③对于互斥和同步的代码块,应该使用业务类来处理,要独立于线程类,再让线程类来调用业务类,实现需求。
代码:
public class TraditionalThreadCommunication {public static void main(String[] args) { final Business business=new Business(); new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {business.sub(i);}}}).start();for (int i = 0; i < 10; i++) {business.main(i);}}}/* * 更面向对象:将线程执行的任务逻辑放到一个业务类里面,<br> * 在业务类中控制他们的互斥和同步<br> * ①使用synchronized进行互斥,说到底就是同一代码的原子性,不可再分。<br> * ②使用一个变量bShouldSub进行同步,说到底就是不同代码的执行顺序。<br> */class Business {boolean bShouldSub = true;public synchronized void sub(int i) {//当代码进来后,线程发现不该自己运行(逆向思维),于是等待,并唤醒其他线程/* * 有时候线程是伪唤醒:即其他线程还在执行,这个线程就醒了,也要执行,就会 * 打乱其他线程的执行。这时,要继续判断一下这个线程是否满足执行条件,使用while即可。 */while (!bShouldSub) {try {this.wait(); //线程等待:即代码中断} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}} //当该自己走,走完后,将bShuouldSub置false,并唤醒其他线程for (int j = 0; j < 10; j++) {System.out.println("sub thread sequence of " + j + ",loop of" + i);}bShouldSub=false;this.notify();//由于另一个线程可能进入了wait,需要唤醒}public synchronized void main(int i) {//当代码进来后,线程发现不该自己运行(逆向思维),于是等待,并唤醒其他线程while (bShouldSub) { try {this.wait(); //线程等待:即代码中断} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//当该自己走,走完后,将bShuouldSub置true,并唤醒其他线程for (int j = 0; j < 10; j++) {System.out.println("main thread sequence of " + j + ",loop of" + i);}bShouldSub=true;this.notify();//由于另一个线程可能进入了wait,需要唤醒}}
- 多线程_线程同步小程序
- 多线程_线程同步
- 线程_多线程_同步机制
- 多线程之同步线程通信小例子
- 第九章 Java多线程机制 05_线程同步_1
- 第九章 Java多线程机制 05_线程同步_2
- 第九章 Java多线程机制 05_线程同步_3
- 第九章 Java多线程机制 05_线程同步_4
- 第九章 Java多线程机制 05_线程同步_5
- 第九章 Java多线程机制 05_线程同步_6
- 多线程编程5 线程同步_临界区(CCriticalSection)
- 多线程编程5 线程同步_事件CEvent
- 多线程编程5 线程同步_互斥量CMutex
- 多线程编程5 线程同步_信号量CSemaphore
- 多线程04_张孝祥-传统线程同步通信技术
- 多线程_同步代码块的方式解决线程安全问题
- 多线程_同步代码块解决线程安全问题的解释
- 黑马程序员_线程高级_多线程,同步,互斥,线程数据共享
- A77使用
- cocos2d-x 2.0.1版本的使用 vs2008 android 上运行 初学篇(1)
- Freescale 9S12 系列单片机应用笔记(SCI)2
- string.format中如何添加大括号{
- 关于apk的反编译修改,你不知道的事,尤其是官方Rom
- 多线程_线程同步小程序
- 修改华为荣耀U8860的官方Rom 之 状态栏透明和下拉通知栏可修改
- 使用WebView实现新浪微博Oauth2.0认证(android)
- 团队需要的六种人
- 播放器只有图像没有声音的解决方案
- 銀時が2億ユーロ2万ユーロ振替コスト裁定帰人れ
- 多线程
- 测试WM_TIMER 消息 以及计时器
- Ubuntu 12.04 软件管理