V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v3exhost
V2EX  ›  Java

Java 用线程池的写法

  •  
  •   v3exhost · 2018-06-20 22:42:55 +08:00 · 2684 次点击
    这是一个创建于 2346 天前的主题,其中的信息可能已经有所发展或是发生改变。
           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);
    	}
    

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

    5 条回复    2018-06-21 09:41:09 +08:00
    hand515
        1
    hand515  
       2018-06-20 23:19:22 +08:00
    你这是问 log 的位置用法哪个好,还是问 Runnable 的用法哪个好?
    mrsatangel
        2
    mrsatangel  
       2018-06-21 00:07:13 +08:00   ❤️ 2
    就你的例子来说,runnable 包业务逻辑或者业务逻辑包 runnable 没区别。现实场景下,需要仔细考虑线程池的边界:如果是对象聚合线程池,那么一般这个对象的方法会调用线程池;如果线程池是全局共享的某个通用异步执行容器,那么直接 executor.submit(()->{业务逻辑})就行,通常这里的业务逻辑最好是独立的、不依赖上下文的。
    wenzhoou
        3
    wenzhoou  
       2018-06-21 07:32:08 +08:00 via Android
    看了半天也觉得没有区别
    phx13ye
        4
    phx13ye  
       2018-06-21 09:06:47 +08:00   ❤️ 1
    没什么区别,相当于你 inline 了 methodB 的逻辑
    jorneyr
        5
    jorneyr  
       2018-06-21 09:41:09 +08:00
    简单点说就是线程池你可以控制线程的数量,重用线程(创建线程是一个耗资源的操作),如果自己创建线程,线程数量不好控制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:25 · PVG 06:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.