title: Java设计模式
date: 2022-1-9 10:17:20
tags: 设计模式
categories: Java
cover: imgcat/java.png

1. 两阶段终止模式

终止模式之两阶段终止模式:Two Phase Termination

目标:在一个线程 T1 中如何优雅终止线程 T2?优雅指的是给 T2 一个后置处理器

错误思想:

  • 使用线程对象的 stop() 方法停止线程:stop 方法会真正杀死线程,如果这时线程锁住了共享资源,当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁
  • 使用 System.exit(int) 方法停止线程:目的仅是停止一个线程,但这种做法会让整个程序都停止

两阶段终止模式图示:

  1. /**
  2. * 优雅的打断正在运行的线程
  3. */
  4. public static void test02(){
  5. Monitor monitor = new Monitor();
  6. monitor.start();
  7. sleep(1000);
  8. monitor.stop();
  9. }
  10. class Monitor{
  11. private Thread monitor;
  12. public void start(){
  13. // 监控器线程
  14. monitor = new Thread(() -> {
  15. // 开始不停得到监控
  16. while(true){
  17. // 判断当前线程是否被打断
  18. if(Thread.currentThread().isInterrupted()){
  19. System.out.println("料理后事...");
  20. break; // 结束循环
  21. }
  22. System.out.println("监控器运行中...");
  23. // 睡眠2s,不需要一直监控
  24. try {
  25. Thread.sleep(2000);
  26. System.out.println("执行监控记录...");
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. // 如果线程在睡眠时被打断,打断标记被设置为false,需要手动设置为true
  30. Thread.currentThread().interrupt();
  31. }
  32. }
  33. }, "monitor");
  34. monitor.start();
  35. }
  36. // 停止监控线程
  37. public void stop(){
  38. monitor.interrupt();
  39. }
  40. }

2. 保护性暂停模式

3. 生产者消费者模式

4. 固定顺序运行模式

5. 交替输出模式

6. 犹豫模式

7. 享元模式

8. 工作线程