`
daibalusu
  • 浏览: 343785 次
文章分类
社区版块
存档分类
最新评论

线程池中Executors应用(一)

 
阅读更多

Executors是JDK1.5中线程并发库的类(api参考java.util.concurrent),该类提供了
很多用于创建线程池的方法,返回的线程池都实现了ExecutorService接口,这些线程池通常可提高程序性能。

本章用到的方法:

1.创建指定线程大小

public static ExecutorService newFixedThreadPool(int nThreads)

2.创建缓存线程池,如果当前没有可用线程,则创建一个新线程并添加到线程池中

public static ExecutorService newCachedThreadPool()

3.创建单一线程,相当于newFixedThreadPool大小为1

public static ExecutorService newSingleThreadExecutor()

例子:

实现创建一个三个线程的线程池,并往线程池中提交五个任务,每个任务循环五遍(既每个任务执行五次)

package com.study.communication;

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

/**
 * 线程池
 * 
 * @author 我夕
 * 
 */
public class ThreadPoolTest {

	public static void main(String[] args) {
		// 创建指定线程大小
		ExecutorService service = Executors.newFixedThreadPool(3);

		// 缓存线程池,这个方法是有多少个任务就创建多少条线程
		// ExecutorService service=Executors.newCachedThreadPool();

		// 创建单一线程,相当于newFixedThreadPool大小为1
		// ExecutorService service=Executors.newSingleThreadExecutor();

		// 循环5次,就是往线程池里扔五个任务
		for (int i = 1; i <= 5; i++) {
			final int task = i;
			service.submit(new Runnable() {

				@Override
				public void run() {
					// 循环五次,就是每个人物执行五遍
					for (int j = 1; j <= 5; j++) {
						// 这里停顿0.2秒,为了调试能够看到更好结果
						try {
							Thread.sleep(200);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println("当前线程" + Thread.currentThread()
								+ "正在执行第 " + task + " 个任务的第 " + j + " 遍");
					}
				}
			});
		}
		System.out.println("所有的任务都提交完毕");
		// 线程用完,记得要关闭
		service.shutdown();
	}

}



执行结果:

从以上结果,可以看出,每次都只有三个任务被执行,因为我们只创建了三个线程,额外以上提到的创建缓存线程此与单一的线程代码中已写出,大家把注释换下就可以了,另外关于线程池一个比较实用的定时器功能,将在下一篇列出,祝大家学习愉快。。。

分享到:
评论

相关推荐

    线程池 Executors

    线程池 Executors

    Java中Executors类中几种创建各类型线程池

    Java中Executors类中几种创建各类型线程池方法及简单实例

    Executor,Executors,ExecutorService比较.docx

    2.newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 3.newScheduledThreadPool 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。 4....

    Java多线程Executors批量执行数据实现限流

    java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程...

    java 线程池管理类:Executors_.docx

    java 线程池管理类:Executors_.docx

    线程池实例:使用Executors和ThreadPoolExecutor

    NULL 博文链接:https://bijian1013.iteye.com/blog/2284676

    Java线程池文档

    [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池。 [2]中介绍了java.util.concurrent.Executors类的API。 [3]中介绍了Java中线程池的类体系...

    java线程池ThreadPoolExecutor类使用详解.docx

    在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了...

    线程-线程池-锁-集合-Map-队列.docx

    线程是系统中可执行调度的...线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,规避资源耗尽的风险。集合的详细描述,以及集合中的异同点,HashMap不同jdk版本区别,ConcurrentHashMap介绍。

    两种线程池写法

    ThreadPoolManager:Executors.newFixedThreadPool(num * 2);// 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程 threadPool: 线程池 创建线程池,销毁线程池,添加新任务

    Mina的线程池实现分析

    线程池是并发应用中,为了减少...在mina中大量的使用这一技术,除了Executors的工厂方法构建线程池之外,它还继承自ThreadPoolExecutor提供自己的线程池的实现OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor

    ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍

    ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍

    java socket线程池

     //Runtime的availableProcessors()方法返回当前系统的CPU的数目 //系统的CPU越多,线程池中工作线程的数目也越多 executorService= Executors.newFixedThreadPool(   Runtime.getRuntime()....

    Android-Android多线程下载项目

    本项目是一个展示多线程下载的项目,使用线程池(Executors.newFixedThreadPool(2))对线程的管理,支持断点续传,第一个版本默认可以两个线程同时下载。

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等示例,列出一些源码包中包括的内容:  volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小...

    验证阿里巴巴禁用Executors的原因

    【强制】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors返回的线程池对象的弊端如下: 1) ...

    Java 4种线程池的使用

     newFixedThreadPool 创建一个定长线程池,可控制线程大并发数,超出的线程会在队列中等待。  newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。  newSingleThreadExecutor 创建一个单...

    Java中的Executors类最全讲义

    Executors类的基本用法 2.1 创建线程池 2.2 提交任务 2.3 关闭线程池 线程池的分类 3.1 FixedThreadPool 3.2 CachedThreadPool 3.3 ScheduledThreadPool 3.4 SingleThreadExecutor 3.5 WorkStealingPool 线程池的...

    线程池核心组件源码剖析.docx

    该组件中,Executor 和 ExecutorService 接口 定义了线程池最核心的几个方法,提交任务 submit ()、关闭线程池 shutdown()。...另外还有一个常见的工具类 Executors,里面为开发者封装了一些可以直接拿来用的线程池。

    面试官这样问Java 线程池,我的回答让他竖起了大拇指!

    面试过程中他问了线程池,今天详细讲一讲Java 线程池。 线程池 线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。 start()创建一定数量的线程池,进行...

Global site tag (gtag.js) - Google Analytics