最近学习netty时了解到Future异步调用,学习下。
FutureTask实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值
import java.util.concurrent.Callable;
/**
* JDK中的future模式:call()方法会构造我们需要的真实数据并返回。
*/
public class RealData implements Callable<String> {
private String para;
public RealData(String para) {
this.para = para;
}
@Override
public String call() throws Exception {
StringBuffer sb = new StringBuffer();
for (int i= 0;i < 10; i++){
sb.append(para);
Thread.sleep(1000);
}
return sb.toString();
}
}
/**
* Created by ddyb on 2016/5/30.
*/
public class FutureMain {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//构造 FutureTask
FutureTask<String> future = new FutureTask<>(new RealData("a"));
//创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
ExecutorService executor = Executors.newFixedThreadPool(1);
// 执行FutureTask
// 在这里开启线程进行RealData的call()执行。
executor.submit(future);
System.out.println("请求完毕...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 如果此时 call() 方法没有执行成功, 则依然会等待。
// 也可以设置超时时间 future.get(5000, TimeUnit.MILLISECONDS)
System.out.println("数据 = " + future.get() );
}
}
转载于:https://my.oschina.net/ddyblackhat/blog/684343
分享到:
相关推荐
JDK 1.6开始内置了对JSON(JavaScript Object Notation)的支持,通过`javax.json`包,开发者可以方便地进行JSON对象的序列化和反序列化。 **7. SQL改进** JDBC(Java Database Connectivity)API在JDK 1.6中进行...
- **对象和类**:Java是面向对象的语言,类是其核心,JDK源码中包含了大量内置类,如`Object`、`String`、`Exception`等。 - **接口与多态**:`interface`定义了类的行为规范,多态性是Java的一大特性,体现在方法...
JDK内置了如@Override、@Deprecated等注解,也可以自定义注解来实现特定的编译期或运行期检查。 9. **类型推断(Type Inference)**: 在创建匿名内部类或者使用泛型时,编译器能够根据上下文自动推断出类型,减少...
6. **JDK并发包**:Java的`java.util.concurrent`包提供了丰富的并发工具类,如Executor框架(ThreadPoolExecutor、Executors等)、Future和Callable接口、ConcurrentHashMap等。这些工具类简化了并发编程,提供了...
2. **锁优化**:在Java中,锁是控制并发访问共享资源的主要手段,包括内置锁(synchronized)、显式锁(Lock接口)、读写锁(ReentrantReadWriteLock)等。优化锁的使用可以提高并发性能,如使用乐观锁、自旋锁、锁...
5. **并发与多线程**:Java在并发处理上有强大的支持,源码中可能包含对`java.concurrent`包下类的深入解析,如`ExecutorService`、`Future`等。 6. **网络编程**:Java的`java.net`包提供了丰富的网络编程接口,...
例如,可以使用Scala的`scala.concurrent.ExecutionContext`来替代Java中的`ExecutorService`,使用`scala.concurrent.Future`来处理异步任务。在实际项目中,还可以考虑使用更高级的并发模型,如Akka Actors,以...
6. **线程安全的类与设计模式**:探讨了线程安全的设计模式,如单例模式、双重检查锁定、生产者消费者模型等,并分析了一些内置的线程安全类,如DateFormat、ThreadLocal等。 7. **并发编程的最佳实践**:书中总结...
节流消息是一系列设计模式中的一部分,用于控制消息流和防止系统过载,这有助于保证系统的稳定性和可靠性。 7.3工作拉动模式(Work Pulling Pattern) 工作拉动模式是一种模式,用于平衡跨多个节点的工作负载,并...
5. **并发编程模式**:如生产者消费者模型、读写锁策略等,这些都是解决并发问题的经典设计模式。 **JDK源码分析** 深入研究JDK源码能帮助我们了解其底层实现,提高代码优化和问题定位的能力。例如: 1. **...
11. 工具使用:需要熟练使用JDK内置命令行工具、JDK内置图形界面工具、JDWP、JMX与相关工具,以及性能测试工具ApacheBench、Wrk、JMeter、LoadRunner等。 12. 面试和实践:包括JVM相关的常见面试问题、业务分析、...
│ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你也许不知道的几件事.mp4 │ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机...
│ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你也许不知道的几件事.mp4 │ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机...
65. **JSP内置对象**:JSP中有9个内置对象,包括request、response、out、session、application、config、pageContext、page以及exception。 66. **JSP的作用域**:有四种作用域:page作用域、request作用域、...
- 多线程:Java内置对多线程的支持,可以创建和管理多个执行线程。 - 内存管理:自动的垃圾回收机制简化了内存管理。 3. **Java进阶** - 集合框架:ArrayList、LinkedList、HashMap等,是存储和操作对象的主要...
此外,实践教程可能还会涉及更高级的主题,如设计模式、反射、注解、泛型、Lambda表达式、Stream API、并发编程库(如ExecutorService和Future)以及Java 8及更高版本的新特性。 通过这个全新的Java实践教程,你...
Java编程语言在面试中常常涉及众多知识点,涵盖了基础语法、容器、多线程、反射、对象拷贝、JavaWeb、异常处理、网络编程、设计模式、框架应用等多个方面。以下是一些常见问题的解答: 1. **JDK、JRE和Java的区别**...
JDK中哪些类是不能继承的 - 许多内置类如`String`、`Integer`等都是`final`类,不能被继承。 #### 30. Java中会存在内存泄漏吗 - 存在,主要发生在未能及时释放不再使用的对象导致GC无法回收。 #### 31. Java中的...
- AQS是JDK中用于构建锁和其他同步组件的基础框架。 - 提供了一套统一的自定义同步器实现规范。 #### 结论 以上内容涵盖了Java并发编程面试中常见的知识点,理解这些概念对于掌握并发编程的基础和高级特性至关重要...