暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[线程设计]-通过观察者模式-监控线程生命周期

花好夜猿 2020-10-19
236

推荐书籍:《Java高并发编程详解》


一、无法掌控 Thread 的生命周期


在 Java 中线程的实现只有一个,就是 Thread

下面是启动一个线程的通用代码,如下:

通过 new Thread
,通过调用其 start()
方法即可开启一个线程。

但是该方式有个问题,线程执行到了哪一个环节,无法得知。


二、观察者-监控线程生命周期


观察者设计模式

观察者模式的定义如下:
在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象会自动收到通知。

观察者模式通常有两种对象角色:观察者被观察者

简单来理解观察者模式:被观察者 持有 观察者 的对象实例,当被观察者 执行了某项操作后,会分别调用持有的观察者 的处理方法,从而达到观察者观察,被观察者通知的效果。

在线程生命周期监控中,观察者就是进行生命周期处理的对象。被观察者就是线程。

线程(被观察者)持有生命周期处理的对象(观察者),当线程执行到某个阶段,调用生命周期处理对象中的对应方法(被观察者),从而达到观察者监控线程生命周期的目的。


三、具体实现


3.1、观察者:生命周期处理

代码类图实现如上,接口定义了在不同线程生命周期的处理逻辑。

相关具体实现可以自行实现

3.2、被观察者:线程

被观察者需要持有观察者对象,才能够完成通知的操作

代码实现类图如上,上述类图中主要是三个类:

  • Thread :Java 中线程的唯一实现

  • Observable:被观察者接口规范(屏蔽 Thread 的API,仅暴露需要的API)

  • ObservableThread:被观察者,继承了 Thread ,拥有线程功能,同时自定接口 Observable
    规范相关操作。

在被观察者(线程实现:ObservableThread) 中,主要的代码逻辑两块:

  • 持有观察者(TaskLifecycleObserve )实例对象

  • 线程执行逻辑(run 方法)

上述两块代码组成了线程监控的主要内容,关键代码如下:

如上述代码所示,在执行线程逻辑 run()
方法时,在特定线程位置,埋点,根据不同的线程生命周期,调用观察者的特定方法,起到监控线程生命周期的效果。

3.2、整体实现类图

End

文章转载自花好夜猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论