张孝祥[致敬]-多线程学习第04课-线程的通信机制
来源:互联网 发布:演唱会设备清单知乎 编辑:程序博客网 时间:2024/06/08 19:22
本人地址:http://blog.csdn.net/hblfyla/article/details/53097649
面试题: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次
代码:
package org.yla.thread.zxx.day04;/** * 传统线程的通信 * @author yangluan * 要求:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次 */public class TraditionalThreadCommucation {public static void main(String[] args) {final Business b = new Business();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <=50; i++) {b.sub(i);}}}).start();for (int i = 1; i <=50; i++) {b.main(i);}}}class Business{private boolean isShouldbeSub=true;//标记为 判断是否该子线程运行public synchronized void sub(int i){while(!isShouldbeSub){ //不该子线程运行的时候进来了try {this.wait(); //等待} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 10; j++) {System.out.println("子线程循环 : "+j+",外层循环: "+i);}isShouldbeSub=false;this.notifyAll();}public synchronized void main(int i){while(isShouldbeSub){//不该主线程运行的时候进来了,检查try {this.wait(); //等待} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 100; j++) {System.out.println("主线程循环 : "+j+",外层循环: "+i);}isShouldbeSub=true;this.notifyAll();}}
代码分析:
(1)首先要写按照程序的要求模拟出子线程循环10次主线程循环100
(2)加上同步代码块,防止数据错乱
(3)加上外层循环50次
(4)利用面向对象的思量,对业务类进程轴向
(5)使用变量标记为来控制这50次循环是交替运行
运行:
子线程循环 : 1,外层循环: 1子线程循环 : 2,外层循环: 1子线程循环 : 3,外层循环: 1子线程循环 : 4,外层循环: 1子线程循环 : 5,外层循环: 1子线程循环 : 6,外层循环: 1子线程循环 : 7,外层循环: 1子线程循环 : 8,外层循环: 1子线程循环 : 9,外层循环: 1子线程循环 : 10,外层循环: 1主线程循环 : 1,外层循环: 1主线程循环 : 2,外层循环: 1主线程循环 : 3,外层循环: 1主线程循环 : 4,外层循环: 1主线程循环 : 5,外层循环: 1主线程循环 : 6,外层循环: 1主线程循环 : 7,外层循环: 1主线程循环 : 8,外层循环: 1主线程循环 : 9,外层循环: 1主线程循环 : 10,外层循环: 1主线程循环 : 11,外层循环: 1主线程循环 : 12,外层循环: 1主线程循环 : 13,外层循环: 1主线程循环 : 14,外层循环: 1主线程循环 : 15,外层循环: 1主线程循环 : 16,外层循环: 1主线程循环 : 17,外层循环: 1主线程循环 : 18,外层循环: 1主线程循环 : 19,外层循环: 1主线程循环 : 20,外层循环: 1主线程循环 : 21,外层循环: 1主线程循环 : 22,外层循环: 1主线程循环 : 23,外层循环: 1主线程循环 : 24,外层循环: 1主线程循环 : 25,外层循环: 1主线程循环 : 26,外层循环: 1主线程循环 : 27,外层循环: 1主线程循环 : 28,外层循环: 1主线程循环 : 29,外层循环: 1主线程循环 : 30,外层循环: 1主线程循环 : 31,外层循环: 1主线程循环 : 32,外层循环: 1主线程循环 : 33,外层循环: 1主线程循环 : 34,外层循环: 1主线程循环 : 35,外层循环: 1主线程循环 : 36,外层循环: 1主线程循环 : 37,外层循环: 1主线程循环 : 38,外层循环: 1主线程循环 : 39,外层循环: 1主线程循环 : 40,外层循环: 1主线程循环 : 41,外层循环: 1主线程循环 : 42,外层循环: 1主线程循环 : 43,外层循环: 1主线程循环 : 44,外层循环: 1主线程循环 : 45,外层循环: 1主线程循环 : 46,外层循环: 1主线程循环 : 47,外层循环: 1主线程循环 : 48,外层循环: 1主线程循环 : 49,外层循环: 1主线程循环 : 50,外层循环: 1主线程循环 : 51,外层循环: 1主线程循环 : 52,外层循环: 1主线程循环 : 53,外层循环: 1主线程循环 : 54,外层循环: 1主线程循环 : 55,外层循环: 1主线程循环 : 56,外层循环: 1主线程循环 : 57,外层循环: 1主线程循环 : 58,外层循环: 1主线程循环 : 59,外层循环: 1主线程循环 : 60,外层循环: 1主线程循环 : 61,外层循环: 1主线程循环 : 62,外层循环: 1主线程循环 : 63,外层循环: 1主线程循环 : 64,外层循环: 1主线程循环 : 65,外层循环: 1主线程循环 : 66,外层循环: 1主线程循环 : 67,外层循环: 1主线程循环 : 68,外层循环: 1主线程循环 : 69,外层循环: 1主线程循环 : 70,外层循环: 1主线程循环 : 71,外层循环: 1主线程循环 : 72,外层循环: 1主线程循环 : 73,外层循环: 1主线程循环 : 74,外层循环: 1主线程循环 : 75,外层循环: 1主线程循环 : 76,外层循环: 1主线程循环 : 77,外层循环: 1主线程循环 : 78,外层循环: 1主线程循环 : 79,外层循环: 1主线程循环 : 80,外层循环: 1主线程循环 : 81,外层循环: 1主线程循环 : 82,外层循环: 1主线程循环 : 83,外层循环: 1主线程循环 : 84,外层循环: 1主线程循环 : 85,外层循环: 1主线程循环 : 86,外层循环: 1主线程循环 : 87,外层循环: 1主线程循环 : 88,外层循环: 1主线程循环 : 89,外层循环: 1主线程循环 : 90,外层循环: 1主线程循环 : 91,外层循环: 1主线程循环 : 92,外层循环: 1主线程循环 : 93,外层循环: 1主线程循环 : 94,外层循环: 1主线程循环 : 95,外层循环: 1主线程循环 : 96,外层循环: 1主线程循环 : 97,外层循环: 1主线程循环 : 98,外层循环: 1主线程循环 : 99,外层循环: 1主线程循环 : 100,外层循环: 1子线程循环 : 1,外层循环: 2子线程循环 : 2,外层循环: 2子线程循环 : 3,外层循环: 2子线程循环 : 4,外层循环: 2子线程循环 : 5,外层循环: 2子线程循环 : 6,外层循环: 2子线程循环 : 7,外层循环: 2子线程循环 : 8,外层循环: 2子线程循环 : 9,外层循环: 2子线程循环 : 10,外层循环: 2主线程循环 : 1,外层循环: 2主线程循环 : 2,外层循环: 2主线程循环 : 3,外层循环: 2主线程循环 : 4,外层循环: 2主线程循环 : 5,外层循环: 2主线程循环 : 6,外层循环: 2主线程循环 : 7,外层循环: 2主线程循环 : 8,外层循环: 2主线程循环 : 9,外层循环: 2主线程循环 : 10,外层循环: 2主线程循环 : 11,外层循环: 2主线程循环 : 12,外层循环: 2主线程循环 : 13,外层循环: 2主线程循环 : 14,外层循环: 2主线程循环 : 15,外层循环: 2主线程循环 : 16,外层循环: 2主线程循环 : 17,外层循环: 2主线程循环 : 18,外层循环: 2主线程循环 : 19,外层循环: 2主线程循环 : 20,外层循环: 2主线程循环 : 21,外层循环: 2主线程循环 : 22,外层循环: 2主线程循环 : 23,外层循环: 2主线程循环 : 24,外层循环: 2主线程循环 : 25,外层循环: 2主线程循环 : 26,外层循环: 2主线程循环 : 27,外层循环: 2主线程循环 : 28,外层循环: 2主线程循环 : 29,外层循环: 2主线程循环 : 30,外层循环: 2主线程循环 : 31,外层循环: 2主线程循环 : 32,外层循环: 2主线程循环 : 33,外层循环: 2主线程循环 : 34,外层循环: 2主线程循环 : 35,外层循环: 2主线程循环 : 36,外层循环: 2主线程循环 : 37,外层循环: 2主线程循环 : 38,外层循环: 2主线程循环 : 39,外层循环: 2主线程循环 : 40,外层循环: 2主线程循环 : 41,外层循环: 2主线程循环 : 42,外层循环: 2主线程循环 : 43,外层循环: 2主线程循环 : 44,外层循环: 2主线程循环 : 45,外层循环: 2主线程循环 : 46,外层循环: 2主线程循环 : 47,外层循环: 2主线程循环 : 48,外层循环: 2主线程循环 : 49,外层循环: 2主线程循环 : 50,外层循环: 2主线程循环 : 51,外层循环: 2主线程循环 : 52,外层循环: 2主线程循环 : 53,外层循环: 2主线程循环 : 54,外层循环: 2主线程循环 : 55,外层循环: 2主线程循环 : 56,外层循环: 2主线程循环 : 57,外层循环: 2主线程循环 : 58,外层循环: 2主线程循环 : 59,外层循环: 2主线程循环 : 60,外层循环: 2主线程循环 : 61,外层循环: 2主线程循环 : 62,外层循环: 2主线程循环 : 63,外层循环: 2主线程循环 : 64,外层循环: 2主线程循环 : 65,外层循环: 2主线程循环 : 66,外层循环: 2主线程循环 : 67,外层循环: 2主线程循环 : 68,外层循环: 2主线程循环 : 69,外层循环: 2主线程循环 : 70,外层循环: 2主线程循环 : 71,外层循环: 2主线程循环 : 72,外层循环: 2主线程循环 : 73,外层循环: 2主线程循环 : 74,外层循环: 2主线程循环 : 75,外层循环: 2主线程循环 : 76,外层循环: 2主线程循环 : 77,外层循环: 2主线程循环 : 78,外层循环: 2主线程循环 : 79,外层循环: 2主线程循环 : 80,外层循环: 2主线程循环 : 81,外层循环: 2主线程循环 : 82,外层循环: 2主线程循环 : 83,外层循环: 2主线程循环 : 84,外层循环: 2主线程循环 : 85,外层循环: 2主线程循环 : 86,外层循环: 2主线程循环 : 87,外层循环: 2主线程循环 : 88,外层循环: 2主线程循环 : 89,外层循环: 2主线程循环 : 90,外层循环: 2主线程循环 : 91,外层循环: 2主线程循环 : 92,外层循环: 2主线程循环 : 93,外层循环: 2主线程循环 : 94,外层循环: 2主线程循环 : 95,外层循环: 2主线程循环 : 96,外层循环: 2主线程循环 : 97,外层循环: 2主线程循环 : 98,外层循环: 2主线程循环 : 99,外层循环: 2主线程循环 : 100,外层循环: 2子线程循环 : 1,外层循环: 3子线程循环 : 2,外层循环: 3子线程循环 : 3,外层循环: 3子线程循环 : 4,外层循环: 3子线程循环 : 5,外层循环: 3子线程循环 : 6,外层循环: 3子线程循环 : 7,外层循环: 3子线程循环 : 8,外层循环: 3子线程循环 : 9,外层循环: 3子线程循环 : 10,外层循环: 3
本人地址:http://blog.csdn.net/hblfyla/article/details/53097649
0 0
- 张孝祥[致敬]-多线程学习第04课-线程的通信机制
- 张孝祥[致敬]-多线程学习第01课 传统线程的创建
- 张孝祥[致敬]-多线程学习第03课-线程的互斥与同步
- 张孝祥[致敬]-多线程学习第05课-线程范围内的共享变量
- 张孝祥[致敬]-多线程学习第06课-多个线程之间的共享变量
- 张孝祥[致敬]-多线程学习第07课-jdk1.5后增加的多线程高级部分
- 张孝祥[致敬]-多线程学习第02课 传统定时器的使用
- 马士兵-多线程学习第04课 线程的同步
- 多线程学习-线程通信
- 多线程编程及线程间通信机制
- 致敬高斯林的第一天
- java多线程学习五:线程间的通信
- 黑马程序员_多线程的线程间通信学习笔记
- JAVA基础学习(十二)--多线程一线程之间的通信
- 多线程学习10-GCD的线程间通信
- 多线程学习笔记3-线程间的通信(1)
- 多线程学习笔记4-线程间的通信(2)
- 多线程基础学习四:线程间的通信
- Input框的智能提示下拉层功能
- QueryPerformanceFrequency与QueryPerformanceCounter计时函数
- ADC实验复习总结
- leetcode4题 题解 翻译 C语言版 Python版
- 树的遍历
- 张孝祥[致敬]-多线程学习第04课-线程的通信机制
- gcc选项-g与-rdynamic的异同
- js关闭当前页面(窗口)的几种方式总结
- AndFix Bug热修复框架的使用
- Hibernate中Criteria的完整用法
- 串口通信
- 2016/11/09
- vim中使用cscope
- C++ int转string