题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍

代码如下:

package com.itheima.gan;
/**
* 子线程执行10次后,主线程再运行5次,这样交替执行三遍
* @author 12428
*
*/
public class Test {
public static void main(String[] args) {
final Bussiness bussiness=new Bussiness();
//创建一个子线程,run方法里面子线程执行3变
new Thread(new Runnable() {
public void run() {
for(int i=0;i<3;i++) {
bussiness.subMethod();
}
}
}).start(); //主线程
for(int i=0;i<3;i++) {
bussiness.mainMethod();
}
} } class Bussiness{
//创建一个私有的标识位
private boolean subFlag=true; public synchronized void mainMethod() { while(subFlag) {
try {
//标识为true 就等待,释放所持有的锁,让另一个线程执行,直到被唤醒才继续执行下去
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} //如果当前的标志位不为true
//就向下执行
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+" : main thread running loop count --"+i);
try {
//线程休眠1s,再执行
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //执行完上面的循环后再把标志位改为true,防止这个线程两次连续执行
subFlag=true;
notify();
} public synchronized void subMethod() {
//如果标识位为false
//就执行等待,让另一个线程执行,直到被唤醒
while(!subFlag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} //如果标识为true
//向下执行
for(int i=0;i<10;i++) {
System.out.println(Thread .currentThread().getName()+" : sub thread runnig loop count -- "+i);
//每执行一次就休眠1s
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} //执行完一个循环后就将标识为改为false,防止这个线程连续两次执行
subFlag=false;
notify(); } }

  运行结果:

  

 

Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍的更多相关文章

  1. 【Java面试题】30 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

    题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次 思路如下: 子线程语主线程为互斥,可用SYNCHRONIZED.很容易想 ...

  2. Java线程面试题:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次

    package thread; /** * 需求:线程编程:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次. * @author zhongfg * @date 2015-06-1 ...

  3. c#子线程执行完怎么通知主线程(转)

    定义一个委托实现回调函数 public delegate void CallBackDelegate(string message); 程序开始的时候 //把回调的方法给委托变量 CallBackDe ...

  4. Android中进程与线程及如何在子线程中操作UI线程

    1. Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view ...

  5. JAVA可阻塞队列-ArrayBlockingQueue子类BlockingQueue的应用,使用它来实现子线程打印10次,主线程打印100次,如此反复

    /** * 使用BlockingQueue实现主子线程互相打印 * @author duwenlei * */ public class BlockingQueueTest { public stat ...

  6. Java面试&编写程序:使子线程循环10次,紧接着主线程循环100次,来回50次

    package com.cwcec.test; public class TraditionalThreadCommunication { /** * @param args */ public st ...

  7. Java如何等待子线程执行结束

    工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...

  8. Java线程池主线程等待子线程执行完成

    今天讨论一个入门级的话题, 不然没东西更新对不起空间和域名~~ 工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一 ...

  9. Java主线程如何等待子线程执行结束(转)

    工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...

随机推荐

  1. apache flink源码挖坑 (未完待续)

    Apache Flink 源码解读(一) ​ By yyz940922原创 项目模块 (除去.git, .github, .idea, docs等): flink-annotations: flink ...

  2. PHP数组创建和遍历(基础)

    数组定义PHP数组可以是混合数组 你的数组里面可以有数字也可以有字符串,二维数组不谈一个数组里还有数组跟C有差别定义方式例如 $dd=array(array(1,2,3),array(1,2,3,4) ...

  3. Python MySQL 创建表

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  4. js模式-观察者模式

    // 主题,接收状态变化,触发每个观察者 class Subject { constructor() { this.state = 0 this.observers = [] } getState() ...

  5. 【剑指Offer】面试题11. 旋转数组的最小数字

    题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个 ...

  6. 将已有微信小程序转换为多端应用

    文档地址 https://nervjs.github.io/taro/

  7. MacOS Safari无响应卡死解决方法

    之前也是用的好好的,突然一次进入一个网页就卡死了,强制退出,后面再重新进入Safari都会处于卡死状态,一直找不到解决方法,Safari也不能卸载重装,想着得等到更新系统或者重装系统,今天看到贴吧一个 ...

  8. 02-NVIDIA Jetson TX2 通过JetPack 3.1刷机完整版(踩坑版)

    未经允许,不得擅自改动和转载 文 | 阿小庆 2018-1-20 本文继第一篇文章:01-NVIDIA Jetson TX2开箱上电显示界面 TX2 出厂时,已经自带了 Ubuntu 16.04 系统 ...

  9. 数据结构顺序表中Sqlist *L,&L,Sqlist *&L

    //定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...

  10. iOS应用内跳转到指定系统设置页

    APP的跳转: 通过[ [UIApplication sharedApplication] openURL:url]这种方法来实现的. iOS 10以后跳转设置页要用 [[UIApplication ...