两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
来源:互联网 发布:tensorflow分布式搭建 编辑:程序博客网 时间:2024/03/29 16:45
明确任务:两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
对于这道题,首先,我们应该明确两个线程交互执行的含义:线程A和线程B共享一个处理机资源,线程A首先获得处理机,线程B处于就绪状态,线程A执行一次后,线程B获得处理机资源,线程A处于就绪状态,依次循环,直到线程A和线程B执行结束。
解题思路:设置共享资源Object o = new Object(),设置互斥信号量boolean flag = true,进行线程同步,线程A执行一次后,唤醒线程B,线程A处于等待状态,线程B执行后亦是如此,如此循环往复,实现了线程A和线程B交互执行10次。
代码如下:
import java.util.Date;public class ThreadEx {private Object o = new Object(); // 共享资源private boolean flag = true; // 互斥信号量class Thread1 extends Thread {public void run() {synchronized (o) { // 线程同步for (int i = 1; i <= 10; i++) {System.out.println("New thread-->A:" + new Date());o.notify(); // 唤醒另外一个进程if(flag){flag = false;try {o.wait(); // 当前线程等待} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println("Thread-->A complete");}}}class Thread2 extends Thread {public void run() {synchronized (o) { // 线程同步for (int i = 1; i <= 10; i++) {System.out.println("New thread-->B:" + new Date());o.notify(); // 唤醒另外一个进程if(!flag){flag = true;try {if(i != 10){o.wait(); // 当前线程等待}} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println("Thread-->B complete");}}}public void show(){new Thread1().start();new Thread2().start();}public static void main(String[] args) {ThreadEx t = new ThreadEx();t.show();}}
打印结果:
New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:27 CST 2014New thread-->B:Mon Mar 31 19:39:27 CST 2014New thread-->A:Mon Mar 31 19:39:28 CST 2014New thread-->B:Mon Mar 31 19:39:28 CST 2014New thread-->A:Mon Mar 31 19:39:28 CST 2014New thread-->B:Mon Mar 31 19:39:28 CST 2014Thread-->B completeThread-->A complete
0 0
- 两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
- 两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
- 两个线程A和B, A打印1, 3, ..., 99, B打印2, 4, ..., 100, 要求A和B严格交替打印(Java实现)
- Java 有两个任务A与B,多线程执行任务A完成后再继续执行任务B
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。
- 线程A分为A1,A2两个步骤,A1执行完毕后通知线程B,线程B执行完毕后通知线程A,线程A接下来执行步骤A2
- 启动三个线程A,B,C,打印10次 按照ABC的顺序输出
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行
- 系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 输入两个整数a和b(b>=0),输出a^b(即a的b次幂)
- //先序a 和中序b 求后序 //已知后序a 中序b 求先序
- 说说Android桌面(Launcher应用)背后的故事(四)——揭秘Workspace
- Aaron Swartz:如何提高效率
- 马云回忆与乔布斯的见面 论创新之必要条件
- oracle常见错误代码说明备忘
- Ubutn操作系统学习笔记三之------文件系统基本结构
- 两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
- 说说Android桌面(Launcher应用)背后的故事(五)——桌面壁纸的添加
- 大数据实战
- C++小结(一)—基本了解
- 说说Android桌面(Launcher应用)背后的故事(六)——研究Launcher而实现的附属品(可以拖拽的ListView)
- 哈尔滨理工大学第四届ACM程序设计竞赛J: xiaodao 我爱你!
- 说说Android桌面(Launcher应用)背后的故事(七)——又是一个附属品(可以转动的绚烂饼图)
- 项目管理---敏捷开发思想---带来相当愉快的项目开发过程
- 【FJOI2014】石子合并问题