`
csf00298
  • 浏览: 1179 次
社区版块
存档分类
最新评论

java.util.concurrent JDK线程池 使用

阅读更多

使用JDK的线程池心得

这里使用的是 java.util.concurrent 包中的线程池。该包中所有方法都是线程安全的。

Executors.newCachedThreadPool();

      API:创建一个可根据需要创建新线程的线程池。 如果想自己设置线程池的参数可以使用使用 :
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,  long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable>workQueue)
   参数:
    corePoolSize - 池中所保存的线程数,包括空闲线程。
    maximumPoolSize - 池中允许的最大线程数。
    keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
    unit - keepAliveTime 参数的时间单位。
    workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的     Runnable 任务

目标方法: 

      需要实现Callable接口

public class TestCollable implements Callable<String>{
	private String result ;
	public TestCollable(String result){
		this.result = result;
	}
	@Override
	public String call() throws Exception {
		System.out.println("开始执行任务----"+Thread.currentThread().getName());
		System.out.println("任务: "+result);
		System.out.println("结束任务----"+Thread.currentThread().getName());
		return "bb";
	}
}

 

使用线程池 多线程调用目标方法

@Test 
public void testCall() throws InterruptedException, ExecutionException{
  	//newCachedThreadPool() 创建一个可根据需要创建新线程的线程池
  ExecutorService executorService = Executors.newCachedThreadPool();
	//调用get()方法程序将会阻塞 直到目标方法有返回值或者抛异常
    for(int i=0 ; i<5 ;i++){
           System.out.println(executorService.submit(new TestCollable("aa")).get());
     }
  }  
 }

 执行结果:

开始任务----pool-1-thread-1
任务: aa
任务结束----pool-1-thread-1
bb
开始任务----pool-1-thread-2
任务: aa
任务结束----pool-1-thread-2
bb

  

由此可以看出 executorService.submit(new TestCollable("aa")).get()); 方法阻塞了程序 直到有结果返回

 

 

将执行结果放入list观察 统一输出结果 不再阻塞程序

@Test
	public void testCall() throws InterruptedException, ExecutionException{
		ExecutorService executorService = Executors.newCachedThreadPool();
		ArrayList<Future<String>> results  = new ArrayList<Future<String>>();
		for(int i=0 ; i<5 ;i++){
			results.add(executorService.submit(new TestCollable("aa")));
		}
		for(Future<String> fs:results){
			System.out.println(fs.get());
		}
	}

 

程序执行结果

开始任务----pool-1-thread-1
开始任务----pool-1-thread-2
任务: aa
任务结束----pool-1-thread-2
任务: aa
任务结束----pool-1-thread-1
bb
bb
开始任务----pool-1-thread-3
任务: aa
任务结束----pool-1-thread-3
bb
开始任务----pool-1-thread-4
任务: aa
任务结束----pool-1-thread-4
bb
开始任务----pool-1-thread-5
任务: aa
任务结束----pool-1-thread-5
bb

 

 

2
0
分享到:
评论

相关推荐

    java.util.concurrent 实现线程池队列

    java.util.concurrent 使用jdk内置的包实现一个线程池的操作

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    动画学习 java.util.concurrent并发工具包

    如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\...3.使用java -cp命令: java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介.doc

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介

    The java.util.concurrent Synchronizer Framework

    Doug Lea关于jdk里面并发同步器的实现。

    Java高性能线程库(java.util.concurrent包的补充)

    一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...

    JDK研究系列--》util.concurrent(java.util part3)

    合适研究底层研发员,但,一般程序员也必须掌握的要点 JDK研究系列--》util.concurrent(java.util part3)

    出现java.util.ConcurrentModificationException 问题及解决办法

    主要介绍了出现java.util.ConcurrentModificationException 问题及解决办法的相关资料,需要的朋友可以参考下

    Redis客户端Redisson.zip

    java.util.SortedSet 分布式 java.util.Queue 分布式 of java.util.Deque 分布式 java.util.Map 分布式 java.util.concurrent.ConcurrentMap 通过TTL实现可重入 java.util.concurrent.locks.Lock 分布式 ...

    jdk 中文版

    java jdk api帮助文档中文版 JavaTM Platform ...org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax org.xml.sax.ext org.xml.sax.helpers

    Java线程池文档

    [2]中介绍了java.util.concurrent.Executors类的API。 [3]中介绍了Java中线程池的类体系结构。 [4]中有ThreadPoolExecutor的实例应用。 [5]中有线程池的实例讲解,实现了一个基于线程池的端口监听服务器。★ [6]...

    backport-util-concurrent(2.2 /3.1)

    backport-util-concurrent(2.2 /3.1) 资源共享,有需要其他jar包的可以在评论留言,看到后我会陆续上传。

    java jdk-api-1.6 中文 chmd

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 ...

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    This document covers the JavaTM Platform, Standard Edition 6 JDK. Its product version number is 6 and developer version number is 1.6.0, as described in Platform Name and Version Numbers. For ...

    java线程池的使用方式

    介绍了java线程池的使用方式。 线程的使用在java中占有极其重要的地位,...Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。

    [Java参考文档].JDK_API 1.6

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java...

    Java并发体系知识导图笔记.xmind

    J.U.C并发包,即java.util.concurrent包,是JDK的核心工具包,是JDK1.5之后,由 Doug Lea实现并引入。

    Java理论与实践:并发在一定程度上使一切变得简单

    本文介绍了当项目中需要XML解析器、文本索引程序和搜索...util.concurrent是JSR 166的切入点,它将带来一组并发性的实用程序,这些实用程序将成为 JDK 1.5中的java.util.concurrent包,但您不必等到那时侯才能使用它。

    Java中LockSupport的使用.docx

    LockSupport是JDK1.6中在java.util.concurrent中的子包locks中引入的一个比较底层的工具类,用来创建锁和其他同步工具类的基本线程阻塞原语。java锁和同步器框架的核心 AQS: AbstractQueuedSynchronizer,就是通过...

    大厂真题之蚂蚁金服-Java高级.zip

    jdk1.7 到 jdk1.8 Map 发生了什么变化(底层)? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组+链表结构变成...解决方案是 jdk 的 ConcurrentHashMap,位于 java.util.concurrent 下,专门 解决并发问题。

Global site tag (gtag.js) - Google Analytics