文档章节

线程池ThreadPool

刘付kin
 刘付kin
发布于 2016/12/08 21:27
字数 390
阅读 26
收藏 0
点赞 0
评论 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
博文 100
码字总数 72832
作品 0
深圳
线程池类,线程管理器:创建线程,执行任务,销毁线程,获取线程基本信息

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

harries ⋅ 2016/06/01 ⋅ 0

浅谈ThreadPool 线程池(引用)

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

技术小美 ⋅ 2017/11/12 ⋅ 0

浅谈ThreadPool 线程池

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

老朱教授 ⋅ 2017/11/26 ⋅ 0

java多线程总结五:线程池的原理及实现

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

陆朋 ⋅ 2013/05/28 ⋅ 2

DICOM:DICOM开源库多线程分析之“LF_ThreadPool in DCM4CHEE”

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

zssureqh ⋅ 2016/01/31 ⋅ 0

ThreadPool 线程池

import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import java.util.TreeSet; public class ThreadPool extends ThreadGroup { private LinkedList workQueu......

guibawudi1985 ⋅ 2012/11/01 ⋅ 0

boost之ThreadPool

threadpool是基于boost库实现的一个线程池子库,但线程池实现起来不是很复杂。我们从threadpool中又能学到什么东西呢? 它是基于boost库实现的,如果大家对boost库有兴趣,看看一个简单的实现...

mjrao ⋅ 2015/09/04 ⋅ 0

# ThreadPool类简介

C#语言有很多值得学习的地方,这里我们主要介绍C# ThreadPool类,包括介绍ThreadPool.QueueUserWorkItem()方法等方面。 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程...

cxycappuccino ⋅ 2011/01/06 ⋅ 0

C#多线程学习(四) 多线程的自动管理(线程池)

本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线...

Yamazaki ⋅ 2012/03/29 ⋅ 0

twisted 线程池管理

管理线程池   线程池是在 twisted.python.threadpool.ThreadPool 中实现的。   我们可以修改线程池的大小,增加或者减少可用线程的数量,可以这么做: from twisted.internet import reac...

疯子张 ⋅ 2014/06/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部