Java 用线程池的写法

2018-06-20 22:42:55 +08:00
 v3exhost
       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);
	}

这两种有什么区别,或者说哪种写法比较好,求解

2701 次点击
所在节点    Java
5 条回复
hand515
2018-06-20 23:19:22 +08:00
你这是问 log 的位置用法哪个好,还是问 Runnable 的用法哪个好?
mrsatangel
2018-06-21 00:07:13 +08:00
就你的例子来说,runnable 包业务逻辑或者业务逻辑包 runnable 没区别。现实场景下,需要仔细考虑线程池的边界:如果是对象聚合线程池,那么一般这个对象的方法会调用线程池;如果线程池是全局共享的某个通用异步执行容器,那么直接 executor.submit(()->{业务逻辑})就行,通常这里的业务逻辑最好是独立的、不依赖上下文的。
wenzhoou
2018-06-21 07:32:08 +08:00
看了半天也觉得没有区别
phx13ye
2018-06-21 09:06:47 +08:00
没什么区别,相当于你 inline 了 methodB 的逻辑
jorneyr
2018-06-21 09:41:09 +08:00
简单点说就是线程池你可以控制线程的数量,重用线程(创建线程是一个耗资源的操作),如果自己创建线程,线程数量不好控制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/464546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX