想在线程执行前,执行后,做一些事情
1
zxlzy 2021-01-18 20:05:16 +08:00
不行,只能是 Spring 代理的类,但是你可以通过继承 ThreadPoolExecutor, 然后重载 execute() 方法实现
|
2
senninha 2021-01-18 20:15:41 +08:00
ASM 插入逻辑生成字节码,然后 redefine 。
|
3
fantastM 2021-01-18 20:42:00 +08:00 1
> 想在线程执行前,执行后,做一些事情
ThreadPoolExecutor 内部提供了两个钩子方法 beforeExecute(Thread, Runnable) 和 afterExecute(Runnable, Throwable),正好符合你的需求。具体的看源码就清楚了 https://github.com/openjdk/jdk/blob/jdk8-b21/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java#L1098-L1130 |
4
hangszhang 2021-01-18 21:32:59 +08:00
有钩子啊, 继承 ThreadPoolExecutor 之后实现就好了
|
5
oneisall8955 2021-01-18 21:54:48 +08:00 via Android
thread/task 用 abstract 封装成 base thread,里面加个 abstract 的 before 方法,run 方法重载先执行 before 再执行具体的 execute 方法。最后具体子类实现 before ?
随便想想,不知道可不可 |
6
gengzi OP |
7
eaglewangl37670 2021-01-19 09:51:11 +08:00
@fantastM 学到了,感谢老哥
|
8
fantastM 2021-01-19 11:21:44 +08:00
@eaglewangl37670 #7 不妨看看我博客里的这篇文章,对线程池的源码分析得更多 :)
https://blog.fantasticmao.cn/2020/10/01/java-threadpoolexecutor-源码分析 / |