张孝祥[致敬]-多线程学习第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