华罗庚《统筹方法》,给出烧水泡茶的多线程解决方案,注意用sleep方法模拟任务花费时间:

  • 参考图二,用两个线程(两个人协作)模拟烧水泡茶过程
  • 文中办法乙、丙都相当于任务串行
  • 图一相当于启动4个线程

image.png

解法1:join

  1. public class Tc {
  2. public static void main(String[] args) {
  3. Thread t1= new Thread(()->{
  4. try {
  5. System.out.println("洗水壶");
  6. Thread.sleep(1);
  7. System.out.println("烧开水");
  8. Thread.sleep(5);
  9. } catch (InterruptedException e) {
  10. e.printStackTrace();
  11. }
  12. },"老王");
  13. Thread t2 = new Thread(()->{
  14. try {
  15. System.out.println("洗茶壶");
  16. Thread.sleep(1);
  17. System.out.println("洗茶杯");
  18. Thread.sleep(2);
  19. System.out.println("拿茶叶");
  20. Thread.sleep(1);
  21. t1.join();//线程同步,等待线程t1执行完毕后再继续执行
  22. } catch (InterruptedException e) {
  23. e.printStackTrace();
  24. }
  25. System.out.println("泡茶");
  26. },"小王");
  27. t1.start();
  28. t2.start();
  29. }
  30. }

线程t2中“拿茶叶”结束后,要和线程t1同步,等待线程t1执行完毕后(水烧开后),再泡茶。