美文网首页
并发编程(2)

并发编程(2)

作者: 禾叶super | 来源:发表于2019-11-26 17:05 被阅读0次

今天说一下使用java.util.concurrent包下的ExecutorService来管理线程的方法。
依然从实例开始
实例1

public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+":before");
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+":thread");
            }
        });
        executorService.shutdown();
        System.out.println(Thread.currentThread().getName()+":after");
    }

这段代码和昨天在并发编程(1)中使用Thread创建线程达到的效果是一样的。


image.png

那么为何要使用线程池来管理线程呢。这是因为线程也是资源,通过Thread类创建的线程是不可重用的,我们无法重新启动线程。创建线程的多少与运行程序的主机的CPU核数有关。并发编程正是利用了多核CPU的处理能力,真正的多线程只能在多核CPU上实现。因此创建的线程并不是越多越好。
通过ExecutorService 来管理线程,可以把线程的创建和执行过程分离开来。这样线程池中的线程可以被重复利用。ExecutorService 可以按需配置线程池的类型,单线程的,带缓存的,基于优先级的等等都可以通过代码配置。

// 获取线程执行后的返回值
executorService.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                
                return "thread1";
            }
        });

如果想了解更多用法,参考链接:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html

相关文章

网友评论

      本文标题:并发编程(2)

      本文链接:https://www.haomeiwen.com/subject/tipjwctx.html