线程join方法demo-模拟叫号看病
2024-09-06 00:03:37
package cn.chapter4.test5; public class SicknessDemo { /**
* 模拟叫号看病
* @param args
*
* 思路:把普通号看病写在主线程里,特需号看病写在子线程里,当普通号看到第10个人之后,让
* 特需号的子线程强制执行,也就是在相应位置写一句 special.join()
*/
public static void main(String[] args) {
// 创建特需号线程
MyThread special = new MyThread("特需号", 10, 3000);
// 修改主线程名称为普通号
Thread.currentThread().setName("普通号");
// 设置特需号线程优先级高,提高特需号叫到的概率
special.setPriority(8);
// 启动子线程,也就是特需号线程
special.start();
// 主线程普通号循环叫号看病
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + ":" + (i + 1)
+ "号病人在看病!");
// 普通号叫到第10个号,特需号线程强行执行,阻塞主线程
if (i == 9) {
try {
// 子线程(特需号线程)强行执行
special.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
// 普通号看病间隔时间
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
} }
} } class MyThread extends Thread {
private String name; // 线程名字
private int number;
private int time; public MyThread(String name, int number, int time) {
super(name); // 调用THread类的构造方法,在创建线程对象时指定线程名
this.number = number;
this.time = time;
} @Override
// run方法里模拟子线程特需号的看病过程
public void run() {
for (int i = 0; i < number; i++) {
System.out.println(this.getName() + ":" + (i + 1) + "号病人在看病!");// this是当前的线程对象
try {
// 设置特需号看病时间
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
} } }
最新文章
- atitit.细节决定成败的适合情形与缺点
- ASP.NET提取多层嵌套json数据的方法
- java入门(1)
- js制作倒计时效果
- c语言 动态数组
- CodeBlocks ubuntu常见问题及小技巧
- MyEclipse6.6 汉化过程
- qt多文档
- java适配器模式随笔记
- Android Spannable
- hbase:应用开发
- js 条件判断放大字体
- 图解SQL的各种连接join
- 西邮linux兴趣小组2014纳新免试题(四)
- 01-初识MySQL数据库
- E - BD String
- 创建第一次C语言程序
- 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标。
- JS 二维数组排序
- CentOS下的Autoconf和AutoMake(完善篇) 3