Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍
题目:子线程执行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次,这样交替执行三遍的更多相关文章
- 【Java面试题】30 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。
题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次 思路如下: 子线程语主线程为互斥,可用SYNCHRONIZED.很容易想 ...
- Java线程面试题:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次
package thread; /** * 需求:线程编程:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次. * @author zhongfg * @date 2015-06-1 ...
- c#子线程执行完怎么通知主线程(转)
定义一个委托实现回调函数 public delegate void CallBackDelegate(string message); 程序开始的时候 //把回调的方法给委托变量 CallBackDe ...
- Android中进程与线程及如何在子线程中操作UI线程
1. Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view ...
- JAVA可阻塞队列-ArrayBlockingQueue子类BlockingQueue的应用,使用它来实现子线程打印10次,主线程打印100次,如此反复
/** * 使用BlockingQueue实现主子线程互相打印 * @author duwenlei * */ public class BlockingQueueTest { public stat ...
- Java面试&编写程序:使子线程循环10次,紧接着主线程循环100次,来回50次
package com.cwcec.test; public class TraditionalThreadCommunication { /** * @param args */ public st ...
- Java如何等待子线程执行结束
工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...
- Java线程池主线程等待子线程执行完成
今天讨论一个入门级的话题, 不然没东西更新对不起空间和域名~~ 工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一 ...
- Java主线程如何等待子线程执行结束(转)
工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...
随机推荐
- 留学Essay写作中常见的两类要求词盘点
写essay的时候,我们会常常因为各式各样的要求词而头疼:discuss,describing,evaluate,explain,等等,他们之间有何区别?如果你在思考这个问题,那么这篇文章就是为你写的 ...
- Elasticsearch 更新文档
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- Docker Ubuntu 例子
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- 2019山东ACM省赛L题题解(FLOYD传递闭包的变形)
本题地址 https://cn.vjudge.net/contest/302014#problem/L Median Time Limit: 1 Second Memory Limit: 6 ...
- 51nod 1191:消灭兔子 贪心+优先队列
1191 消灭兔子 题目来源: 2013腾讯马拉松赛第三场 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有N只兔子,每只有一个血量B[i],需要 ...
- Linux终端命令行的常用快捷键
history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 !?string? 执行含有 ...
- eclipse的重要快捷键
1.快速修正:ctrl + 1 2.单词补全:alt + / 3.查看轮廓:ctrl + o 4.打开eclipse中工作区的资源: ctrl + shift + r 它可以打开当前eclipse的工 ...
- 77.Q表达式详解
Q表达式可以包裹查询条件,可以在多个条件之间进行操作:与或非等.Q表达式一般会放在filter()中进行使用,F表达式一般是放在update()中进行使用. 定义模型的models.py文件中,示例代 ...
- Redis: Reducing Memory Usage
High Level Tips for Redis Most of Stream-Framework's users start out with Redis and eventually move ...
- java里mongodb复合查询
Query query = new Query();Criteria criteria = Criteria.where("packetTitle").is(redPacketSt ...