博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多线程之线程池
阅读量:6263 次
发布时间:2019-06-22

本文共 3707 字,大约阅读时间需要 12 分钟。

 与连接池类似,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()或call()方法,当执行完毕后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。

  • Executors工厂类:该工厂类包含多个静态工厂方法来创建线程池。 
    ① newCachedThreadPool():创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。 
    ② newFixedThreadPool(int nThreads):创建一个可重用的、具有固定线程数的线程池 
    ③ newScheduledThreadPool(int corePoolSize):创建具有指定线程数的线程池,它可以在指定延迟后执行线程任务。 
    ④ newWorkStealingPool(int parallelism):创建持有足够的线程的线程池来支持给定的并行级别,该方法还会使用多个队列来减少竞争。
  • ExecutorService类:代表尽执行线程的线程池,即只要线程池中有空闲线程,就立即执行线程任务
  • ScheduledExecutorService类:代表可在指定延迟后或周期性地执行线程任务的线程池。

使用线程池来执行线程任务的步骤如下:

    1. 调用Executors类的静态工厂方法创建一个ExecutorService对象,该对象代表一个线程池
    2. 创建Runnable实现类或Callable实现类的实例,作为线程执行任务
    3. 调用ExecutorService对象的submit()方法来提交Runnable实例或Callable实例
    4. 当不想提交任何任务时,调用ExecutorService对象的shutdown()方法来关闭线程

 

 

例子:

package com.ming.thread.six.threadpool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。 * @author ming * */public class CachedThreadPoolTest {    public static void main(String[] args) {        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();        for (int i = 0; i < 10; i++) {            final int index = i;            try {                Thread.sleep(index * 1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            cachedThreadPool.execute(new Runnable() {                public void run() {                    System.out.println(index);                }            });        }    }}

 

package com.ming.thread.six.threadpool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 创建一个可重用的、具有固定线程数的线程池  * @author ming * */public class FixedThreadPoolTest {    public static void main(String[] args) {        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);        for (int i = 0; i < 10; i++) {            final int index = i;            fixedThreadPool.execute(new Runnable() {                public void run() {                    try {                        System.out.println(index);                        Thread.sleep(2000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            });        }    }}

 

package com.ming.thread.six.threadpool;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * 线程迟中定时执行/创建具有指定线程数的线程池,它可以在指定延迟后执行线程任务。  * @author ming * */public class ScheduledThreadPoolTest {    public static void main(String[] args) {        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);        scheduledThreadPool.scheduleAtFixedRate(new Runnable() {            public void run() {                System.out.println("delay 3 seconds");            }        }, 1, 3, TimeUnit.SECONDS);//表示延迟1秒后每3秒执行一次。    }}

 

package com.ming.thread.six.threadpool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 创建持有足够的线程的线程池来支持给定的并行级别,该方法还会使用多个队列来减少竞争。 * @author ming * */public class SingleThreadExecutorTest {    public static void main(String[] args) {        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();        for (int i = 0; i < 10; i++) {            final int index = i;            singleThreadExecutor.execute(new Runnable() {                public void run() {                    try {                        System.out.println(index);                        Thread.sleep(2000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            });        }    }}

 

转载地址:http://gszpa.baihongyu.com/

你可能感兴趣的文章
innodb_flush_method参数解析
查看>>
蛋白质结构模型和功能预测:Swiss-model工具的使用
查看>>
plink提取指定样本和指定SNP的数据(keep,extract函数)
查看>>
python算法
查看>>
多维数组的遍历性能
查看>>
CSS选择器
查看>>
服务器的操作系统和我们用的操作系统有什么区别? (转)
查看>>
jquery ui sortable 实现table,row的拖动。(Make Table Rows Sortable Using jQuery UI Sortable)...
查看>>
IntelliJ IDEA(九) :插件(转)
查看>>
Find Minimum in Rotated Sorted Array II
查看>>
HDFS-HA高可用
查看>>
实现一个 Variant
查看>>
php-final
查看>>
STL学习笔记--变易算法
查看>>
看一个人怎么样,要看他做的事和做事的方式
查看>>
Go开发之路(目录)
查看>>
SpringMVC----@CookieValue绑定请求中的Cookie值
查看>>
AsyncTask
查看>>
nginx和flask安装与配置
查看>>
java多线程(1)
查看>>