`
famoushz
  • 浏览: 2966489 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk5多线程调度之 ExecutorService + Future使用

阅读更多
例子代码:
java 代码
 
  1. import java.util.concurrent.Callable;  
  2. import java.util.concurrent.ExecutionException;  
  3. import java.util.concurrent.ExecutorService;  
  4. import java.util.concurrent.Executors;  
  5. import java.util.concurrent.Future;  
  6. class TimeConsumingTask implements Callable {  
  7.  public Person call() throws Exception {  
  8.   ExecutorService executor = Executors.newSingleThreadExecutor();  
  9.   Future future = executor.submit(new Callable<String>(){  
  10.    public String call() throws Exception {  
  11.     return "内部线程代码";  
  12.    }  
  13.      
  14.   });  
  15.   String resultString = null;  
  16.   try {  
  17.    resultString = (String) future.get();  
  18.    System.out.printf("内部: %s\n", resultString);  
  19.   } catch (InterruptedException e) {  
  20.    // TODO Auto-generated catch block  
  21.    e.printStackTrace();  
  22.   } catch (ExecutionException e) {  
  23.    // TODO Auto-generated catch block  
  24.    e.printStackTrace();  
  25.   }  
  26.     
  27.   return new Person(1,"彭帅");  
  28.  }  
  29. }  
  30.    
  31.    
  32. import java.io.DataOutputStream;  
  33. import java.util.concurrent.ExecutionException;  
  34. import java.util.concurrent.ExecutorService;  
  35. import java.util.concurrent.Executors;  
  36. import java.util.concurrent.Future;  
  37.   
  38. public class PersonTest {  
  39.  public static void main(String[] args){  
  40.   ExecutorService executor = Executors.newSingleThreadExecutor();  
  41.   Future future = executor.submit(new TimeConsumingTask());  
  42.   Person resultPerson = null;  
  43.   try {  
  44.    resultPerson = (Person) future.get();  
  45.    resultPerson.move(Direction.DOWN);  
  46.   } catch (InterruptedException e) {  
  47.    // TODO Auto-generated catch block  
  48.    e.printStackTrace();  
  49.   } catch (ExecutionException e) {  
  50.    // TODO Auto-generated catch block  
  51.    e.printStackTrace();  
  52.   }  
  53.  }  
  54. }  
  55.    
  56. import java.util.Hashtable;  
  57. public class Person {  
  58.  private static Hashtable<Direction, String> hashValues = new Hashtable<Direction, String>();  
  59.  static{  
  60.   for(Direction d: Direction.values()){  
  61.    hashValues.put(d, d.name());  
  62.   }  
  63.  }  
  64.    
  65.  private long id;  
  66.  private String name;  
  67.  public Person(){  
  68.     
  69.  }  
  70.  public Person(long id, String name) {  
  71.   super();  
  72.   this.id = id;  
  73.   this.name = name;  
  74.  }  
  75.  public long getId() {  
  76.   return id;  
  77.  }  
  78.  public void setId(long id) {  
  79.   this.id = id;  
  80.  }  
  81.  public String getName() {  
  82.   return name;  
  83.  }  
  84.  public void setName(String name) {  
  85.   this.name = name;  
  86.  }  
  87.  public void move(Direction direct){  
  88.   System.out.printf(this.name + " towarding %s", hashValues.get(direct));  
  89.  }  
  90. }  
  91.   
  92. public enum Direction {  
  93.  UP, DOWN, LEFT, RIGHT;  
  94. }  



分享到:
评论

相关推荐

    详解JDK中ExecutorService与Callable和Future对线程的支持

    Java并发编程中的ExecutorService、Callable和Future ...在实际应用中,我们可以使用ExecutorService、Callable和Future来实现各种并发编程任务,如统计某个盘子的大小、统计多个盘子的总大小、实现高效的数据处理等。

    java多线程.pdf

    Java多线程的使用能够提高程序的并发性能,但同时也需要注意线程安全和死锁等问题,合理设计线程的生命周期和同步机制对于编写高效、稳定的多线程程序至关重要。在开发过程中,应充分利用Java提供的并发工具类,如...

    张孝祥Java多线程与并发库高级应用笔记

    - **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...

    java 多线程同步

    在JDK 5.0中,引入了大量并发改进,包括JVM级别的变化,如引入了Compare-and-Swap(CAS)指令,这是一种轻量级的并发原语,能够在硬件层面支持多线程对共享内存位置的无锁更新。这使得开发者能够创建高度可伸缩的并发...

    多线程、JVM复习&面试&强化训练100题

    如果一个类在多线程环境下能够安全地使用,没有出现数据不一致或数据污染的情况,这个类就被认为是线程安全的。 JVM(Java虚拟机)是运行Java字节码的虚拟机进程,它在不同的操作系统上提供了一致的运行环境。JVM的...

    深入浅出Java多线程.pdf

    - **Thread 类**:Java 中实现多线程的主要方式之一,继承自 Object 类,实现了 Runnable 接口。 - **Runnable 接口**:实现此接口以定义线程的任务,通常与 Thread 类结合使用。 - **Callable & Future**:提供了...

    JDK1.6API帮助文档

    首先,JDK1.6 API的核心在于Java语言库,这是一个庞大的类库集合,涵盖了从基本数据类型操作到网络通信、多线程编程、图形用户界面设计等各个方面的功能。其中,核心类库包括`java.lang`、`java.io`、`java.util`和`...

    java多线程并发编程 核心技术应用实践

    Java多线程并发编程是Java开发中的重要领域,它涉及到如何高效地利用计算机资源,特别是在多核处理器系统中,能够显著提升程序的执行效率。在《java多线程并发编程核心技术应用实践》中,我们将深入探讨Java平台上的...

    Java线程 高级使用

    - **调试技巧**:多线程调试比较复杂,可以使用JDK自带的调试工具,如JVisualVM等,来帮助分析线程的状态和行为。 通过以上内容的学习,读者可以深入了解Java线程的高级使用方法,掌握如何在Java程序中高效地管理和...

    阿里JDK协程架构设计.pdf

    这意味着需要提供API接口,使得开发者可以方便地在现有的多线程代码中平滑过渡到协程编程。 7. **性能测试与调优**:在实际应用中,性能测试是评估协程架构效果的关键步骤。阿里JDK可能会有一套完整的性能基准测试...

    倒计时程序JDK6.0

    JDK 6.0还引入了`ExecutorService`和`Future`,它们提供了更灵活的线程管理和任务调度。 3. **Swing或AWT**:如果倒计时程序需要用户界面,可以使用Java的GUI库,如Swing或AWT。`javax.swing.Timer`是一个很好的...

    java开发手册 api文档(jdk1.8中文)

    `ExecutorService`和`Future`接口为异步计算和任务调度提供了强大的支持。此外,`synchronized`关键字和`volatile`变量确保了线程安全,而`Lock`接口及其实现如`ReentrantLock`则提供了更细粒度的锁控制。 在网络...

    JDK1.6——API文档完整版

    此外,ExecutorService和Future接口提供了一种更灵活的线程管理和任务调度方式,而synchronized关键字和Lock接口则用于线程同步和互斥。 **异常处理** Java的异常处理机制通过try-catch-finally语句块实现,提供了...

    【多线程高并发编程】四 java(jdk1.8)五种线程池,你都知道具体的应用场景吗?

    在给定的代码示例中,使用 `ExecutorService` 的 `newFixedThreadPool(int nThreads)` 方法创建了一个固定大小的线程池,其参数 `nThreads` 指定了线程池中线程的数量。线程池中的任务通过 `submit()` 方法提交,...

    JDK_API_1_6_zh_CN.CHM

    `Thread`类是线程的基类,而`ExecutorService`和`Future`接口则是并发编程的重要组件,它们简化了线程管理和任务调度。 6. **反射**:`java.lang.reflect`包允许在运行时检查和操作类、接口、字段和方法,是动态...

    JavaSE常见面试题-线程篇.pdf

    9. **多线程的应用场景**:虽然在Java Web开发中,服务器容器(如Tomcat)通常已经实现了多线程处理请求,但在其他领域,如定时任务、数据库连接管理等,多线程仍是不可或缺的。 10. **ExecutorService与线程池**:...

    林信良的jdk6学习笔记源代码

    **并发编程**:JDK6中的并发工具包(java.util.concurrent)得到了显著增强,添加了如`ExecutorService`、`Future`、`Callable`等接口和`ThreadPoolExecutor`、`ScheduledThreadPoolExecutor`等类,使得多线程编程...

    JDK6API中文手册

    1. **java.concurrent** 包:JDK6大大增强了并发编程的支持,提供了如ExecutorService、Future、Callable等工具,简化了线程管理和任务调度。并发工具类如Semaphore、CyclicBarrier、CountDownLatch等,为多线程协作...

    Java线程开发小程序(随机点名器)

    使用Thread类或者Runnable接口可以创建新的线程,而Java的ExecutorService和Future接口提供了更高级的线程管理和任务调度功能。开发者可能使用了SwingWorker,这是一个特别设计用来更新Swing组件的后台线程类,确保...

    jdk api 1.8.CHM 中文版

    - ExecutorService和Future:提供了更高级的线程管理和任务调度机制。 - Synchronized、volatile关键字:保证线程安全,防止数据不一致。 5. **I/O流** - 字节流和字符流:InputStream/OutputStream处理字节数据...

Global site tag (gtag.js) - Google Analytics