这是一个来自《java编程思想上的示例》

  1. package demo.thread;
  2. /**
  3. *sleep()是静态方法,是属于类的,作用是让当前线程阻塞
  4. *join()是使线程同步,如在某个线程里调用t.join()表示t线程执行完再执行当前线程
  5. *interrupt()给线程设定一个标志表示该线程已被中断,但在异常捕获时将清理这个标志
  6. *所以在catch子句中,该标志为false
  7. */
  8. public class SleepJoinDemo {
  9. public static void main(String[] args) {
  10. Sleeper sleep1 = new Sleeper("sleep1", 1500);
  11. Sleeper sleep2 = new Sleeper("sleep2", 1500);
  12. Joiner join1 = new Joiner("join1", sleep1);
  13. Joiner join2 = new Joiner("join2", sleep1);
  14. sleep2.interrupt();
  15. }
  16. }
  17. class Sleeper extends Thread {
  18. // 可以传参设定睡眠时间
  19. private int sleepTime;
  20. public Sleeper(String name, int sleepTime) {
  21. super(name);
  22. this.sleepTime = sleepTime;
  23. start();// 在构造方法中启动
  24. }
  25. @Override
  26. public void run() {
  27. try {
  28. sleep(sleepTime);
  29. } catch (InterruptedException e) {
  30. System.out.println(getName() + " was interrupted.\n"
  31. + "isInterrupted():" + isInterrupted());
  32. return;
  33. }
  34. System.out.println(getName() + " has awakened");
  35. }
  36. }
  37. class Joiner extends Thread {
  38. private Sleeper sleeper;
  39. public Joiner(String name, Sleeper sleeper) {
  40. super(name);
  41. this.sleeper = sleeper;
  42. start();
  43. }
  44. public void run() {
  45. try {
  46. sleeper.join();//合并,异步变同步
  47. } catch (InterruptedException e) {
  48. System.out.println("interrupted");
  49. }
  50. System.out.println(getName() + " join completed");
  51. }
  52. }

最新文章

  1. Maven中的dependencyManagement 意义
  2. DES根据键值加密解密
  3. ehcache的介绍和使用
  4. 虚拟化技术比较 PV HVM
  5. GIT之一 起步篇
  6. android如何实现开机自动启动Service或app
  7. Linux device tree 简要笔记
  8. [Angular 2] Generate Angular 2 Components Programmatically with entryComponents & ViewContainerRef
  9. Java中main函数参数String args[] 和 String[] args 区别
  10. 【基本计数方法---加法原理和乘法原理】UVa 11538 - Chess Queen
  11. 【HDOJ】2385 Stock
  12. ios常用动画
  13. MySQL单列索引和组合索引的区别介绍
  14. sqlite数据库方言配置
  15. 利用gsoap工具,通过wsdl文件生成webservice的C++工程文件
  16. 检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005
  17. [Winform]基于Emgu.CV人脸识别
  18. complexity_action
  19. 洛谷P1168中位数
  20. shell中的字符串操作和数学运算

热门文章

  1. python 使用@property
  2. [OC Foundation框架 - 22] 集合的内存管理
  3. 让UILabel具有链接功能,点击后调用safari打开网址
  4. 偶遇mysql外键不好使
  5. 【Stage3D学习笔记续】真正的3D世界(二):显示模型
  6. mysql之数据库备份与恢复
  7. winform 多线程中ShowDialog()步骤无效的解决办法
  8. JavaScript Source Map 详解
  9. JS 添加千分位,测试可以使用
  10. Codeforces Round #324 (Div. 2) E. Anton and Ira 贪心