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();
}
} } }

最新文章

  1. atitit.细节决定成败的适合情形与缺点
  2. ASP.NET提取多层嵌套json数据的方法
  3. java入门(1)
  4. js制作倒计时效果
  5. c语言 动态数组
  6. CodeBlocks ubuntu常见问题及小技巧
  7. MyEclipse6.6 汉化过程
  8. qt多文档
  9. java适配器模式随笔记
  10. Android Spannable
  11. hbase:应用开发
  12. js 条件判断放大字体
  13. 图解SQL的各种连接join
  14. 西邮linux兴趣小组2014纳新免试题(四)
  15. 01-初识MySQL数据库
  16. E - BD String
  17. 创建第一次C语言程序
  18. 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标。
  19. JS 二维数组排序
  20. CentOS下的Autoconf和AutoMake(完善篇) 3

热门文章

  1. 631D Messenger
  2. Visual Studio Code - 快捷键
  3. day13—CSS之导航栏
  4. Invoke和BeginInvoke的区别(转载)
  5. Oracle-创建索引分区
  6. Delphi 文件转换Base64
  7. Linux 初始化系统(init)- systemd
  8. github转gitee
  9. Linux多线程服务器端编程
  10. 批量更新:A表数据源 B表目标