- 浏览: 1588713 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; /** * Callable Future (类是有回调的 线程池任务) 可以获取 线程执行后的 结果(无序的) */ public class CallableAndFuture { /** * @param args * @throws ExecutionException * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException,Exception { ExecutorService threadPool=Executors.newSingleThreadExecutor(); // 提交当个任务 然后获取等待结果 Future<String> future=threadPool.submit(new Callable<String>() { @Override public String call() throws Exception { // TODO Auto-generated method stub Thread.sleep(2000); return "Hello: "+Thread.currentThread().getName(); } }); System.out.println("等待结果中..."); //什么时候有结果后 再获取结果 System.out.println("结果为:"+future.get()); //等待 1秒后 获取结果 没有取到结果就算了 System.out.println("结果为:"+future.get(1, TimeUnit.SECONDS)); threadPool.shutdown(); //批量提交任务 然后 循环获取 执行后的结果 ExecutorService threadPool1=Executors.newFixedThreadPool(10); CompletionService<Integer> completionService=new ExecutorCompletionService<Integer>(threadPool1); for (int i = 0; i < 10; i++) { final int seq=i; completionService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { // TODO Auto-generated method stub Thread.sleep(new Random().nextInt(5000)); return seq; } }); } System.out.println("2等待结果中..."); for (int i = 0; i < 10; i++) { System.out.println(completionService.take().get()); } threadPool1.shutdown(); } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 995public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2280经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5650package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 979import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1054/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1005//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1822更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1416import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 813import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2396import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 922// lock 练习 public class Lock ... -
JDK1.5 线程池
2016-08-02 14:48 800import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1144import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3889import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 964/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1020import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1838Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1000/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2228package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1984PO(persistant object) 持久 ...
相关推荐
创建`ThreadPoolExecutor`实例后,可通过`execute()`方法提交`Runnable`任务,或通过`submit()`方法提交`Callable`任务并获取`Future`对象以获取结果。 **线程池的实现原理** 1. **线程创建**:当线程池的线程数...
ExecutorService用于管理和执行线程池中的线程,Callable用于返回某个结果,Future用于获取异步计算的结果。它们之间的紧密相连,共同实现了高效、安全的并发编程。 在实际应用中,我们可以使用ExecutorService、...
- **支持返回值**:通过`call()`方法可以返回执行结果,这一点在处理复杂的业务逻辑时尤为重要。 - **异常处理机制**:不同于`Runnable`中的`run()`方法只能捕获或忽略异常,`Callable`的`call()`方法可以通过`...
4. **Future和Callable接口**:提供了异步计算的模型,允许在不阻塞当前线程的情况下获取计算结果。 线程的同步是多线程编程中的关键问题,防止数据竞争和死锁的发生。在《Java Threads Third Edition》中,作者...
这些接口允许异步计算并获取结果,Callable可以返回一个结果,而Future则提供了检查任务完成状态和获取结果的方法。 5. **ScheduledExecutorService的早期实现:ScheduledThreadPool** - 对于定时任务的执行,...
在 JDK 中,FutureTask 类是 Future 模式的实现,它实现了 Runnable 接口,作为单独的线程运行。在其 run() 方法中,通过 Sync 内部类调用 Callable 接口,并维护 Callable 接口的返回对象。当使用 FutureTask.get()...
`Callable`和`Future`接口提供了获取线程执行结果的能力,而`Future`的`get()`方法可以阻塞直到结果可用。 `Lock`接口和`Condition`类提供了比`synchronized`更细粒度的锁控制,允许更灵活的线程同步策略。`...
**Callable和Future**接口提供了一种返回结果的多线程处理方式,与`Runnable`不同,`Callable`的任务可以有返回值,`Future`用于获取任务的结果。 另外,Java 1.5还引入了一些高级同步工具,如**Semaphore**(信号...
`Thread`类用于创建和管理线程,而`java.util.concurrent`包引入了高级并发工具,如`ExecutorService`、`Future`、`Callable`等,使得多线程编程更加高效和安全。 4. **网络编程**:`java.net`包提供了网络通信功能...
Future接口在Java 5中被引入,主要用于解决多线程环境下控制线程执行顺序和获取执行结果的复杂性问题。传统的多线程实现,如继承Thread类、实现Runnable接口或Callable接口,虽然能实现并发,但在处理结果获取和线程...
- Future对象提供了`get()`方法,可以获取线程执行完毕后的结果。这种方式支持有返回值的多线程编程。 4. 线程状态管理: - Java线程有五种状态:新建、就绪、运行、阻塞和死亡。线程的状态可以通过Thread对象的`...
`Callable`的`call()`方法执行后会返回一个`Future`对象,可以用来获取任务的结果或取消任务。 - `Callable`接口是在JDK 1.5中引入的,相比`Runnable`接口提供了更强大的功能。 7. **CyclicBarrier和...
另外,还引入了并发包(java.util.concurrent),提供了一组高效的线程管理和同步工具,如ExecutorService、Future和Callable等,大大简化了多线程编程。 **JDK 1.8**是Java发展历程中的一个重要里程碑,引入了...
在主线程中,我们可以使用 Future 对象来获取子线程的执行结果。如果子线程执行过程中发生异常,Future 对象将抛出异常。我们可以使用 try-catch 语句来捕获异常,并进行事务的回滚。 当子线程任务发生异常时,如何...
ExecutorService、Future、Callable接口,以及synchronized、volatile关键字的实现,都是多线程编程的重点。理解这些源码可以帮助我们编写更高效、更安全的并发代码。 5.IO流:Java的IO系统在1.7版本中已经有了丰富...
9. **Future和Callable接口**:用于获取异步计算的结果,是Java并发编程的重要组成部分。 10. **JDK1.x的新特性**:根据描述中提到的“jdk1.”,这里可能是JDK1.8或更高版本,那么可以讨论Lambda表达式、Stream API...
7. **java.util.concurrent**:这个包提供了一套高级的并发工具,如ExecutorService、Future、Callable等,便于编写高效、安全的多线程应用。 四、网络编程 8. **java.net**:包含了Socket、ServerSocket、URL等类...
而`Callable`接口则更加强大,它有一个返回结果的`call()`方法,可以抛出受检查的异常,并且可以通过Future和ExecutorService获取其计算结果。 在Java中,`Runnable`通常用于简单的无返回值的任务,而`Callable`...
JDK 1.6在并发编程方面有显著提升,引入了`java.util.concurrent`包,提供了一组高效并发工具类,如`ExecutorService`、`Future`、`Callable`等,简化了多线程编程。此外,`java.lang.ThreadLocal`类也得到了加强,...