`
- 浏览:
2966489 次
- 性别:
- 来自:
上海
-
jdk5多线程调度之 ExecutorService + Future使用
例子代码:
java 代码
- import java.util.concurrent.Callable;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.Future;
- class TimeConsumingTask implements Callable {
- public Person call() throws Exception {
- ExecutorService executor = Executors.newSingleThreadExecutor();
- Future future = executor.submit(new Callable<String>(){
- public String call() throws Exception {
- return "内部线程代码";
- }
-
- });
- String resultString = null;
- try {
- resultString = (String) future.get();
- System.out.printf("内部: %s\n", resultString);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- } catch (ExecutionException e) {
-
- e.printStackTrace();
- }
-
- return new Person(1,"彭帅");
- }
- }
-
-
- import java.io.DataOutputStream;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.Future;
-
- public class PersonTest {
- public static void main(String[] args){
- ExecutorService executor = Executors.newSingleThreadExecutor();
- Future future = executor.submit(new TimeConsumingTask());
- Person resultPerson = null;
- try {
- resultPerson = (Person) future.get();
- resultPerson.move(Direction.DOWN);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- } catch (ExecutionException e) {
-
- e.printStackTrace();
- }
- }
- }
-
- import java.util.Hashtable;
- public class Person {
- private static Hashtable<Direction, String> hashValues = new Hashtable<Direction, String>();
- static{
- for(Direction d: Direction.values()){
- hashValues.put(d, d.name());
- }
- }
-
- private long id;
- private String name;
- public Person(){
-
- }
- public Person(long id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void move(Direction direct){
- System.out.printf(this.name + " towarding %s", hashValues.get(direct));
- }
- }
-
- public enum Direction {
- UP, DOWN, LEFT, RIGHT;
- }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java并发编程中的ExecutorService、Callable和Future ...在实际应用中,我们可以使用ExecutorService、Callable和Future来实现各种并发编程任务,如统计某个盘子的大小、统计多个盘子的总大小、实现高效的数据处理等。
Java多线程的使用能够提高程序的并发性能,但同时也需要注意线程安全和死锁等问题,合理设计线程的生命周期和同步机制对于编写高效、稳定的多线程程序至关重要。在开发过程中,应充分利用Java提供的并发工具类,如...
- **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...
在JDK 5.0中,引入了大量并发改进,包括JVM级别的变化,如引入了Compare-and-Swap(CAS)指令,这是一种轻量级的并发原语,能够在硬件层面支持多线程对共享内存位置的无锁更新。这使得开发者能够创建高度可伸缩的并发...
如果一个类在多线程环境下能够安全地使用,没有出现数据不一致或数据污染的情况,这个类就被认为是线程安全的。 JVM(Java虚拟机)是运行Java字节码的虚拟机进程,它在不同的操作系统上提供了一致的运行环境。JVM的...
- **Thread 类**:Java 中实现多线程的主要方式之一,继承自 Object 类,实现了 Runnable 接口。 - **Runnable 接口**:实现此接口以定义线程的任务,通常与 Thread 类结合使用。 - **Callable & Future**:提供了...
首先,JDK1.6 API的核心在于Java语言库,这是一个庞大的类库集合,涵盖了从基本数据类型操作到网络通信、多线程编程、图形用户界面设计等各个方面的功能。其中,核心类库包括`java.lang`、`java.io`、`java.util`和`...
Java多线程并发编程是Java开发中的重要领域,它涉及到如何高效地利用计算机资源,特别是在多核处理器系统中,能够显著提升程序的执行效率。在《java多线程并发编程核心技术应用实践》中,我们将深入探讨Java平台上的...
- **调试技巧**:多线程调试比较复杂,可以使用JDK自带的调试工具,如JVisualVM等,来帮助分析线程的状态和行为。 通过以上内容的学习,读者可以深入了解Java线程的高级使用方法,掌握如何在Java程序中高效地管理和...
这意味着需要提供API接口,使得开发者可以方便地在现有的多线程代码中平滑过渡到协程编程。 7. **性能测试与调优**:在实际应用中,性能测试是评估协程架构效果的关键步骤。阿里JDK可能会有一套完整的性能基准测试...
JDK 6.0还引入了`ExecutorService`和`Future`,它们提供了更灵活的线程管理和任务调度。 3. **Swing或AWT**:如果倒计时程序需要用户界面,可以使用Java的GUI库,如Swing或AWT。`javax.swing.Timer`是一个很好的...
`ExecutorService`和`Future`接口为异步计算和任务调度提供了强大的支持。此外,`synchronized`关键字和`volatile`变量确保了线程安全,而`Lock`接口及其实现如`ReentrantLock`则提供了更细粒度的锁控制。 在网络...
此外,ExecutorService和Future接口提供了一种更灵活的线程管理和任务调度方式,而synchronized关键字和Lock接口则用于线程同步和互斥。 **异常处理** Java的异常处理机制通过try-catch-finally语句块实现,提供了...
在给定的代码示例中,使用 `ExecutorService` 的 `newFixedThreadPool(int nThreads)` 方法创建了一个固定大小的线程池,其参数 `nThreads` 指定了线程池中线程的数量。线程池中的任务通过 `submit()` 方法提交,...
`Thread`类是线程的基类,而`ExecutorService`和`Future`接口则是并发编程的重要组件,它们简化了线程管理和任务调度。 6. **反射**:`java.lang.reflect`包允许在运行时检查和操作类、接口、字段和方法,是动态...
9. **多线程的应用场景**:虽然在Java Web开发中,服务器容器(如Tomcat)通常已经实现了多线程处理请求,但在其他领域,如定时任务、数据库连接管理等,多线程仍是不可或缺的。 10. **ExecutorService与线程池**:...
**并发编程**:JDK6中的并发工具包(java.util.concurrent)得到了显著增强,添加了如`ExecutorService`、`Future`、`Callable`等接口和`ThreadPoolExecutor`、`ScheduledThreadPoolExecutor`等类,使得多线程编程...
1. **java.concurrent** 包:JDK6大大增强了并发编程的支持,提供了如ExecutorService、Future、Callable等工具,简化了线程管理和任务调度。并发工具类如Semaphore、CyclicBarrier、CountDownLatch等,为多线程协作...
使用Thread类或者Runnable接口可以创建新的线程,而Java的ExecutorService和Future接口提供了更高级的线程管理和任务调度功能。开发者可能使用了SwingWorker,这是一个特别设计用来更新Swing组件的后台线程类,确保...
- ExecutorService和Future:提供了更高级的线程管理和任务调度机制。 - Synchronized、volatile关键字:保证线程安全,防止数据不一致。 5. **I/O流** - 字节流和字符流:InputStream/OutputStream处理字节数据...