歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java多線程總結三:sleep()、join()、interrupt()示例

Java多線程總結三:sleep()、join()、interrupt()示例

日期:2017/3/1 10:55:57   编辑:Linux編程

這是一個來自《Java編程思想》上的示例。 下載見 http://www.linuxidc.com/Linux/2011-11/48069.htm

  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. }
Copyright © Linux教程網 All Rights Reserved