文档章节

线程池ThreadPool

刘付kin
 刘付kin
发布于 2016/12/08 21:27
字数 390
阅读 29
收藏 0

#总共有5中线程池:

ExecutorService  pool1 = Executors.newFixedThreadPool(2);
ExecutorService  pool2 = Executors.newCachedThreadPool();
ExecutorService  pool3 = Executors.newScheduledThreadPool(2);
		
ExecutorService  pool4 = Executors.newSingleThreadExecutor();
ExecutorService  pool5 = Executors.newWorkStealingPool();
  • 它们都有execute()、submit()等方法。

  • 我们执行它的execute()方法其实只是任务放在它里面的消息队列中,然后它内部再去轮询这个消息队列来执行这些任务。我们的主线程不会等待他的。

  • 问题1:这些任务他怎么知道怎么执行?你这个任务里面有什么东西?

    这就需要统一的接口标准,往里面扔的任务必须implements Runable接口才行(为什么?) 因为:只要你实现了Runable/callable接口,就必须实现一个run方法,这样只需要把逻辑都写在run方法中,线程池就可以把他给启动起来了。

#线程池的使用

所谓给线程池提交任务,就是:

  • 1、你将任务(业务处理逻辑)写到一个runnable或者callable的执行方法<run() | call()>
  • 2、将这个runnable对象提交给线程池即可

#代码实例:

package org.java.threadpool;

import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test {

	public static void main(String[] args) {
		
		ExecutorService  pool1 = Executors.newFixedThreadPool(2);
		ExecutorService  pool2 = Executors.newCachedThreadPool();
		ExecutorService  pool3 = Executors.newScheduledThreadPool(2);
		
		ExecutorService  pool4 = Executors.newSingleThreadExecutor();
		ExecutorService  pool5 = Executors.newWorkStealingPool();
		
		ArrayList<Runnable> runnables = new ArrayList<>();
		pool1.shutdown();
		//这个就是生产者!!
		for(int i = 0; i < 100; i++){
			runnables.add(new Runnable() {
				[@Override](https://my.oschina.net/u/1162528)
				public void run() {
					try {
						System.out.println(Thread.currentThread().getName());
						Thread.sleep(5000);
						System.out.println("工作完成!!");
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			});
		}
		
		//消费者!!!
		for(Runnable runnable : runnables){
			pool1.execute(runnable);
		}
		
		//主线程是不等待线程池的。
		System.out.println("早就执行完了,不等待线程池的处理了");
	}
}

© 著作权归作者所有

共有 人打赏支持
刘付kin
粉丝 6
博文 98
码字总数 71383
作品 0
深圳
线程池类,线程管理器:创建线程,执行任务,销毁线程,获取线程基本信息

package com.xxx.xxx.common.utils; import java.util.LinkedList; import java.util.List; /** * 线程池类,线程管理器:创建线程,执行任务,销毁线程,获取线程基本信息 * @author liuhai...

harries
2016/06/01
65
0
浅谈ThreadPool 线程池(引用)

出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的容器; 一个应用程序最多只能有一个线程池; ThreadPool...

技术小美
2017/11/12
0
0
浅谈ThreadPool 线程池

相关概念: 线程池可以看做容纳线程的容器; 一个应用程序最多只能有一个线程池; ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创...

老朱教授
2017/11/26
0
0
java多线程总结五:线程池的原理及实现

1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程...

陆朋
2013/05/28
0
2
DICOM:DICOM开源库多线程分析之“LF_ThreadPool in DCM4CHEE”

题记: 临近农历年关(对国人来说,这个才叫新年嘛),工作琐事较多,因此本月发博数量锐减至①篇。虽不以博文数量为目标,但每月一篇的数量还是说不过去。博文数量锐减,总结下来有两个原因...

zssureqh
2016/01/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
36分钟前
0
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
43分钟前
1
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
58分钟前
150
8
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
1
0
Ubuntu集群-使用MAAS开始裸机安装

Ubuntu使用MAAS装机的七个步骤。 1、Setup your hardware You need one small server for MAAS and at least one server which can be managed with a BMC. It is recommended to have the M......

openthings
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部