java自带线程池代码示例(包含线程组,线程池的区别)
博客专区 > 洋哥6 的博客 > 博客详情
java自带线程池代码示例(包含线程组,线程池的区别)
洋哥6 发表于2年前
java自带线程池代码示例(包含线程组,线程池的区别)
  • 发表于 2年前
  • 阅读 222
  • 收藏 4
  • 点赞 1
  • 评论 1

腾讯云 技术升级10大核心产品年终让利>>>   


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 实现多线程服务器的细节。
线程队列:是指线程处于拥塞的时候形成的调度队列

共有 人打赏支持
洋哥6
粉丝 77
博文 137
码字总数 148849
评论 (1)
洋哥6
* 线程池的submit方法和excute()的方法的区别:
* 1:两者都是利用线程池中的线程执行传入的任务
* 2:submit() 会返回结果(具体返回Future或FutureTask),excute()返回void
×
洋哥6
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: