文档章节

java自带线程池代码示例(包含线程组,线程池的区别)

满风
 满风
发布于 2016/04/14 19:22
字数 625
阅读 242
收藏 4


package com.dy.pool;

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

/**
 * 
 * @author dengyang
 *
 * 线程池的submit方法和excute()的方法的区别:
 * 1:两者都是利用线程池中的线程执行传入的任务
 * 2:submit() 会返回结果(具体返回Future或FutureTask),excute()返回void
 * 
 * @2012-4-13上午10:46:26
 */
public class ThreadPool {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		ExecutorService threadPool = Executors.newFixedThreadPool(3);
//		ExecutorService threadPool = Executors.newCachedThreadPool();//池中线程数是动态变化的 
//		ExecutorService threadPool =Executors.newSingleThreadExecutor();//一个线程,如果死了,就再启动一个线程,保证池中有一个线程

		for (int i = 0; i < 10; i++) {
			final int task = i;
			threadPool.execute(new Runnable() {
				public void run() {
					for (int j = 0; j < 10; j++) {
						System.out.println(Thread.currentThread().getName() + " loop of " + j + " on task " + task);
					}
				}
			});
		}
		System.out.println(" all task execut complete!");
		
		/*
		 * 定时器线程池
		 */
		Executors.newScheduledThreadPool(3).schedule(new Runnable(){
			public void run() {
				System.out.println(" bombing!");
			}
		}, 5, TimeUnit.SECONDS);//多久后开始bombing



		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
			public void run() {
				System.out.println(Thread.currentThread().getName()+","+" bombing!");//多久后开始bombing,然后每个多久bomning
			}
		}, 5, 2,TimeUnit.SECONDS);


		threadPool.shutdown();
//		threadPool.shutdownNow();
	}
}


类模型:


1:你可以参考这个博客地址:http://www.oschina.net/question/565065_86540   线程池和队列详解地址!


线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。
允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。
线程池:我们可以把并发执行的任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程。只要池里有空闲的线程,任务就会分配给一个线程执行。在线程池的内部,任务被插入一个阻塞队列(Blocking Queue ),线程池里的线程会去取这个队列里的任务。当一个新任务插入队列时,一个空闲线程就会成功的从队列中取出任务并且执行它。
线程池经常应用在多线程服务器上。每个通过网络到达服务器的连接都被包装成一个任务并且传递给线程池。线程池的线程会并发的处理连接上的请求。以后会再深入有关 Java 实现多线程服务器的细节。
线程队列:是指线程处于拥塞的时候形成的调度队列

© 著作权归作者所有

共有 人打赏支持
满风

满风

粉丝 87
博文 166
码字总数 175990
作品 0
杭州
技术主管
私信 提问
加载中

评论(1)

满风
满风
* 线程池的submit方法和excute()的方法的区别:
* 1:两者都是利用线程池中的线程执行传入的任务
* 2:submit() 会返回结果(具体返回Future或FutureTask),excute()返回void
-1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方...

noteless
07/03
0
0
java基础thread——java5之后的多线程(浅尝辄止)

承上启下 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象L...

潇潇漓燃
06/03
0
0
JVM 运行时数据区简介及堆与栈的区别

理解JVM运行时的数据区是Java编程中的进阶部分。我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机制,...

大数据之路
2015/08/02
0
1
国内首位中间件Oracle ACE:WebLogic执行线程耗尽解决方案

作者介绍 王超,国内第一位中间件ORACLE ACE,东方宏达中间件技术总监,原ORACLE|BEA 资深中间件现场支持工程师,14年现场支持工作经验,WebLogic 6.1/7.0/8.1/9.2/10.3/11g/12c、Tuxedo技术...

王超
2016/08/16
0
0
JAVA多线程和并发基础面试问答

Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一...

清风傲剑
2014/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 哥们之间报恩的想法被上帝实现了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲《消愁》 《消愁》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @过遥 :周一的早上就应该用来补觉,太困了 周末不想...

小小编辑
今天
251
7
MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
今天
3
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
7
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
24
1
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部