文档章节

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

满风
 满风
发布于 2016/04/14 19:22
字数 625
阅读 241
收藏 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 实现多线程服务器的细节。
线程队列:是指线程处于拥塞的时候形成的调度队列

© 著作权归作者所有

共有 人打赏支持
满风

满风

粉丝 83
博文 165
码字总数 175959
作品 0
杭州
技术主管
加载中

评论(1)

满风
满风
* 线程池的submit方法和excute()的方法的区别:
* 1:两者都是利用线程池中的线程执行传入的任务
* 2:submit() 会返回结果(具体返回Future或FutureTask),excute()返回void
java基础thread——java5之后的多线程(浅尝辄止)

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

潇潇漓燃
06/03
0
0
-1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

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

noteless
07/03
0
0
国内首位中间件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
JVM 运行时数据区简介及堆与栈的区别

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

大数据之路
2015/08/02
0
1
Java线程:线程的调度-守护线程

Java线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,J...

scau_JD
2014/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
3
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部