java线程池(一) 简述线程池的几种使用方式

来源:互联网 发布:美工初学者视频教程 编辑:程序博客网 时间:2024/05/24 05:03

首先说明下java线程是如何实现线程重用的

1. 线程执行完一个Runnable的run()方法后,不会被杀死 2. 当线程被重用时,这个线程会进入新Runnable对象的run()方法

java线程池由Executors提供的几种静态方法创建线程池。下面通过代码片段简单介绍下线程池的几种实现方式。后续会针对每个实现方式做详细的说明

newFixedThreadPool

创建一个固定大小的线程池
添加的任务达到线程池的容量之后开始加入任务队列开始线程重用总共开启线程个数跟指定容量相同。

 @Test    public void newFixedThreadPool() throws Exception {        ExecutorService executorService = Executors.newFixedThreadPool(1);        executorService = Executors.newFixedThreadPool(1, new ThreadFactoryBuilder().build());        RunThread run1 = new RunThread("run 1");        executorService.execute(run1);        executorService.shutdown();    }

newSingleThreadExecutor

仅支持单线程顺序处理任务

  @Test    public void newSingleThreadExecutor() throws Exception {        ExecutorService executorService = Executors.newSingleThreadExecutor();        executorService = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().build());        executorService.execute(new RunThread("run 1"));        executorService.execute(new RunThread("run 2"));        executorService.shutdown();    }

newCachedThreadPool

这种情况跟第一种的方式类似,不同的是这种情况线程池容量上线是Integer.MAX_VALUE 并且线程池开启缓存60s

  @Test    public void newCachedThreadPool() throws Exception {        ExecutorService executorService = Executors.newCachedThreadPool();        executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().build());        executorService.execute(new RunThread("run 1"));        executorService.execute(new RunThread("run 2"));        executorService.shutdown();    }

newWorkStealingPool

支持给定的并行级别,并且可以使用多个队列来减少争用。

 @Test    public void newWorkStealingPool() throws Exception {        ExecutorService executorService = Executors.newWorkStealingPool();        executorService = Executors.newWorkStealingPool(1);        RunThread run1 = new RunThread("run 1");        executorService.execute(run1);        executorService.shutdown();    }

newScheduledThreadPool

看到的现象和第一种相同,也是在线程池满之前是新建线程,然后开始进入任务队列,进行线程重用
支持定时周期执行任务(还没有看完)

  @Test    public void newScheduledThreadPool() throws Exception {        ExecutorService executorService = Executors.newScheduledThreadPool(1);        executorService = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().build());        executorService.execute(new RunThread("run 1"));        executorService.execute(new RunThread("run 2"));        executorService.shutdown();    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 守护宝老年机打不开了怎么办 小米电话手表坏了怎么办 小米手表带坏了怎么办 小米电话手表屏幕坏了怎么办 雷诺梅甘娜06款系统错乱怎么办 轿车碰了一个坑怎么办 车子卖了没过户怎么办 9岁儿童肠胃痉挛怎么办 鹿角胶水放多了怎么办 打胰岛素血糖还是高怎么办 血糖高打胰岛素降不下去怎么办 儿童低烧37度1怎么办 小孩发烧一会冷一会热怎么办 月子里得的风湿怎么办 腰窝中间凸起肉怎么办 线雕后一个月脸发红肿胀怎么办 雷诺氏病手指僵硬疼怎么办 哺乳妈妈吃咸了怎么办 吃流产药哺乳了怎么办 坐月子吃咸了怎么办啊 拔罐放血后头晕怎么办 e道航界面不动怎么办 微信必须打开位置权限怎么办 魅族sim卡未启用怎么办 苹果6sgps信号弱怎么办 苹果5s4g网络慢怎么办 苹果5s上网很慢怎么办 手机一体机死机关不了机怎么办 联想一体机关不了机怎么办 纸巾盒的吸盘老化了怎么办 粘的挂钩老掉怎么办 车载手机支架吸盘吸不住怎么办 吸盘吸不住怎么办才好? 行车记录仪吸盘吸不住怎么办 小米儿童手表二维码丢了怎么办 艾蔻手表二维码丢失了怎么办 玩具直升机遥控器坏了怎么办 玩具飞机遥控器坏了怎么办 玩具无人机遥控器坏了怎么办 玩具遥控车遥控器坏了怎么办 用遥控器关电视后打不开怎么办