`
lizhensan
  • 浏览: 378695 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK自带的多线程API的简单例子

    博客分类:
  • java
 
阅读更多
package cn.sunline.ant.task.concurrent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Test {

	public static void main(String[] args) {
		// 执行的服务
		ExecutorService service = Executors.newFixedThreadPool(4);
		CompletionService<Result> completion = new ExecutorCompletionService<Result>(service);//这个东西很关键
		// 每个任务的执行结果
		List<Future<Result>> futures = new ArrayList<Future<Result>>();

		// 开始并发的跑任务
		futures.add(completion.submit(new MyTask(10)));
		futures.add(completion.submit(new MyTask(1)));
		futures.add(completion.submit(new MyTask(5)));

		for (int i = 0; i < 3; i++) {
			try {
				// 这里会阻塞等待任务完成
				Result result = completion.take().get();
				System.out.println(result.msg);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		//这里的顺序与任务请求的顺序不一定相同,具体要看每个任务的执行速度
		for (Future<Result> f : futures) {
			try {
				// 这里会阻塞等待任务完成
				Result result = f.get();
				System.out.println(result.msg);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	static class Result {
		String msg;
	}

	static class MyTask implements java.util.concurrent.Callable<Result> {
		int id;

		public MyTask(int id) {
			this.id = id;
		}

		@Override
		public Result call() throws Exception {
			Result ret = new Result();
			ret.msg = "处理任务:" + id;
			Thread.sleep(id * 1000);
			return ret;
		}
	}

}

 

分享到:
评论

相关推荐

    jdk1.8api文档

    API文档的核心价值在于它详尽地阐述了Java平台的公共类库,涵盖了核心类库、集合框架、I/O流、多线程、网络编程、反射、泛型、注解等诸多领域。对于初学者,通过阅读API文档可以了解每个类的基本结构和功能,掌握...

    jdk-8u291-windows-x64.rar

    3. **Javadoc**:JDK自带的javadoc工具可以生成Java源代码的文档,便于理解和维护代码。 4. **JVM调优**:JDK 8提供了JConsole和VisualVM等工具,用于监控Java应用的性能,进行JVM调优。 5. **JAR打包**:使用jar...

    jdk-8u301-windows-x64.rar

    - **Lambda表达式**:Java 8引入了函数式编程的关键特性——lambda表达式,使得编写简洁的匿名函数成为可能,极大地简化了多线程编程和集合处理。 - **方法引用和构造器引用**:与lambda表达式结合使用,可以更...

    Java jdk1.7学习笔记pdf

    - **多释放**:允许在单个`try`语句中使用多个资源,这使得资源管理变得更加简单。 - **类型注解**:增强了泛型类型的可读性和类型安全,允许开发者对类型参数、方法返回类型等进行注解。 ##### 2.2 性能优化 - **...

    jdk8安全下载压缩包

    - 了解并实践Java内存模型、多线程、并发编程等高级主题,是成为专业Java开发者的关键。 - 学习如何利用JDK提供的诊断和监控工具,有助于排查和解决性能问题。 总的来说,JDK 8作为Java开发的核心,其特性和工具...

    Java JDK6 ppt简体版 (清华大学出版)

    新增了并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList,这些集合在多线程环境中提供了更好的性能和安全性。此外,泛型的使用也更为广泛,提升了代码的类型安全性和可读性。 4. **NIO.2** 新的Java NIO.2...

    jdk-7u79-windows-x64-7.zip

    - **调试**:利用JDK自带的`jdb`命令进行源代码级别的调试,或者使用IDE提供的集成调试功能。 - **性能分析**:可以使用`jvisualvm`工具进行内存分析、线程分析和性能监控。 **数据库安装包关联**: 虽然这个...

    Java 线程

    - JVisualVM(JDK自带)提供丰富的线程监控视图,包括线程状态、CPU占用、线程 dump等功能。 - VisualVM、YourKit等商业Java性能分析工具提供了更强大的线程分析能力。 10. **中断与异常处理** - `Thread....

    java编程规范-性能篇

    - 当需要大量字符串相加时,应使用`StringBuffer`(对于多线程环境)或`StringBuilder`(对于单线程环境)。这是因为String是不可变的,每次`+`操作都会创建新的String对象,对于大量的字符串拼接,这会导致大量的...

    java讲解ppt及实例代码

    6. **多线程**:Java内置了对多线程的支持,学习者将学习如何创建和管理线程,理解同步和互斥的概念,以及死锁和活锁的问题。 7. **Java标准库**:PPT可能还会涉及Java的API,如Math类、String类、日期/时间API等,...

    《JAVA并发编程艺术》

    Java内存模型(JMM)是并发编程中绕不开的话题,书里会解释JMM如何保证多线程环境下的可见性和有序性,并通过实例解析volatile和synchronized的内存语义。此外,书中还将涉及线程局部变量(ThreadLocal)及其在实际...

    JAVA教程PPT版

    10. **调试与测试**:最后,学习如何使用JDK自带的调试工具,以及JUnit进行单元测试,是成为一名合格Java开发者必备的技能。 通过这份PPT教程,你可以系统地学习Java编程,从基础知识到高级特性,一步步建立起扎实...

    RMI.rar_remote

    在RMI项目中,这可能涉及到RMI相关的库,如JDK自带的RMI API,或者其他支持RMI功能的第三方库。 在实现RMI时,开发者需要注意网络通信的性能优化,如减少远程调用的次数,缓存远程对象的引用,以及正确处理并发和...

    Java并发编程实战(中文版).7z

    8. **并发编程的调试和监控**:介绍了如何使用JDK自带的工具,如jconsole、jstack和jmap等,来诊断和优化并发程序。 通过阅读《Java并发编程实战》,读者不仅可以掌握Java并发编程的基础知识,还能学习到如何在实际...

    Java讲义与实例

    8. **多线程**:Java内置了对多线程的支持,通过Thread类或实现Runnable接口,可以创建并运行多个并发执行的任务,提高程序的执行效率。 9. **输入输出流**:Java的I/O流系统提供了一套丰富的类库,用于读写文件、...

    Netty源码解析1

    Netty 封装了JDK底层的BIO(阻塞I/O)和NIO(非阻塞I/O)模型,提供了更为高级的API,让开发者可以专注于业务逻辑而不是底层的网络编程细节。 Netty 解决了一个关键问题——拆包和粘包。在TCP传输中,数据可能会被...

    scala编程指导文档

    给定的部分内容展示了一个Java编写的多线程服务器的例子,尽管不是Scala代码,但其设计思路对于理解并发编程有帮助。该服务器使用`ExecutorService`来管理线程池,通过`ServerSocket`接受客户端连接,并为每个连接...

    Mina2.0学习笔记

    - **使用JDK自带线程池的阻塞服务器**:进一步优化线程管理。 - **NIO基础知识**:介绍Buffer、Channel、Selector等基本概念。 - **基于NIO的阻塞服务器**:利用NIO特性改进阻塞模式。 - **基于NIO的非阻塞...

    java问题定位技术+性能优化

    - **6.2 JDK自带的几个Timer的适用场合** - `java.util.Timer`: 适用于简单的计时任务。 - `java.swing.Timer`: 专为Swing GUI设计。 - **6.3 池的合理设计** - **6.3.1 对象池** - 重用昂贵的对象,减少创建和...

    Java开发指南

    10. **多线程**:Java内置了对多线程的支持,开发者可以通过创建`Thread`对象或实现`Runnable`接口来实现并发执行。 11. **Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于构建桌面应用。Swing是传统...

Global site tag (gtag.js) - Google Analytics