题目:子线程执行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. Emacs服务器模式以及emacsclient配置

    Emacs有很多强大的插件,但是插件安装多了会导致启动速度很慢.为了解决这个问题,一个方法是使用emacs提供的server模式. 基本用法[1] 启动emacs server: $ emacs -- ...

  2. 146-PHP 使用<<<和HTML混编(二)

    <?php $html=<<<HTM1 <title>PHP输出HTML代码</title> <body> <a href=#> ...

  3. C#使窗体不显示在任务栏

    this.ShowInTaskbar = false;///使窗体不显示在任务栏

  4. Eclipse 中打开工程目录的插件

    我们想在Eclipse中的打开工程目录,Eclipse 自身没有这个功能,我们可以安装一个插件来实现这个功能.具体的操作方法如下: (1).到以下链接中下载插件:https://github.com/ ...

  5. 逆向-PE重定位表

    重定位表 ​ 当链接器生成一个PE文件时,会假设这个文件在执行时被装载到默认的基地址处(基地址+RVA就是VA).并把code和data的相关地址写入PE文件.如果像EXE一样首先加载就是它image ...

  6. (排序EX)P1093 奖学金

    题解: #include<iostream>using namespace std;int r=0;void swap(int &a,int &b){  int t=a;  ...

  7. Web基础之Servlet

    Servlet Servlet : server applet,直译服务小程序.那Servlet到底是什么呢? Servlet说白了其实就是一个接口,接口的作用是什么?规范呗,这个接口规定了下面三个问 ...

  8. Linux终端命令行的常用快捷键

    history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 !?string? 执行含有 ...

  9. 利用方法HttpUtility.HtmlEncode来预处理用户输入

    利用方法HttpUtility.HtmlEncode来预处理用户输入.这样能阻止用户用链接注入JavaScript代码或HTML标记,比如//Store/Broswe?Genre=<script ...

  10. URAL_1018 Binary Apple Tree 树形DP+背包

    这个题目给定一棵树,以及树的每个树枝的苹果数量,要求在保留K个树枝的情况下最多能保留多少个苹果 一看就觉得是个树形DP,然后想出 dp[i][j]来表示第i个节点保留j个树枝的最大苹果数,但是在树形过 ...