public static ExecutorService executorService = Executors.newCachedThreadPool();
@Test
public void testThread(){
methodA();
log.info("----------分割线-----------");
Runnable runnable = () -> {
methodB();
};
executorService.submit(runnable);
}
public static void methodB(){
log.info("business");
}
public static void methodA(){
Runnable runnable = () -> {
log.info("business");
};
executorService.submit(runnable);
}
这两种有什么区别,或者说哪种写法比较好,求解
1
hand515 2018-06-20 23:19:22 +08:00
你这是问 log 的位置用法哪个好,还是问 Runnable 的用法哪个好?
|
2
mrsatangel 2018-06-21 00:07:13 +08:00 2
就你的例子来说,runnable 包业务逻辑或者业务逻辑包 runnable 没区别。现实场景下,需要仔细考虑线程池的边界:如果是对象聚合线程池,那么一般这个对象的方法会调用线程池;如果线程池是全局共享的某个通用异步执行容器,那么直接 executor.submit(()->{业务逻辑})就行,通常这里的业务逻辑最好是独立的、不依赖上下文的。
|
3
wenzhoou 2018-06-21 07:32:08 +08:00 via Android
看了半天也觉得没有区别
|
4
phx13ye 2018-06-21 09:06:47 +08:00 1
没什么区别,相当于你 inline 了 methodB 的逻辑
|
5
jorneyr 2018-06-21 09:41:09 +08:00
简单点说就是线程池你可以控制线程的数量,重用线程(创建线程是一个耗资源的操作),如果自己创建线程,线程数量不好控制。
|