`

java多线程(JDK1.5)

    博客分类:
  • java
阅读更多

一组多线程使用的例子:http://janeky.iteye.com/category/124727

 

 

JDK1.5的包:

java.util.concurrent

 

1、

public interface Future<V>

Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。计算完成后只能使用 get 方法来检索结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为基础任务的结果。

用法示例(注意,下列各类都是构造好的。)

 

 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target) throws InterruptedException {
     Future<String> future = executor.submit(new Callable<String>() {
         public String call() { return searcher.search(target); }
     });
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }
 

FutureTask 类是 Future 的一个实现,Future 可实现 Runnable,所以可通过 Executor 来执行。例如,可用下列内容替换上面带有 submit 的构造:

     FutureTask<String> future =
       new FutureTask<String>(new Callable<String>() {
         public String call() {
           return searcher.search(target);
       }});
     executor.execute(future);

2、

public interface Callable<V>

返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。

Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。

Executors 类包含一些从其他普通形式转换成 Callable 类的实用方法。

 

3、

public interface ExecutorService
extends Executor

Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。

可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。

通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAnyinvokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。

Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。

用法示例

下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int) 工厂方法:

 class NetworkService {
    private final ServerSocket serverSocket;
    private final ExecutorService pool;

    public NetworkService(int port, int poolSize) throws IOException {
      serverSocket = new ServerSocket(port);
      pool = Executors.newFixedThreadPool(poolSize);
    }
 
    public void serve() {
      try {
        for (;;) {
          pool.execute(new Handler(serverSocket.accept()));
        }
      } catch (IOException ex) {
        pool.shutdown();
      }
    }
  }

  class Handler implements Runnable {
    private final Socket socket;
    Handler(Socket socket) { this.socket = socket; }
    public void run() {
      // read and service request
    }
 }
4、
public interface Executor

执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start()

 Executor executor = anExecutor;
 executor.execute(new RunnableTask1());
 executor.execute(new RunnableTask2());
 ...
 

不过,Executor 接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用方的线程中立即运行已提交的任务:

 class DirectExecutor implements Executor {
     public void execute(Runnable r) {
         r.run();
     }
 }

更常见的是,任务是在某个不是调用方线程的线程中执行的。以下执行程序将为每个任务生成一个新线程。

 class ThreadPerTaskExecutor implements Executor {
     public void execute(Runnable r) {
         new Thread(r).start();
     }
 }

许多 Executor 实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。

 class SerialExecutor implements Executor {
     final Queue<Runnable> tasks = new LinkedBlockingQueue<Runnable>();
     final Executor executor;
     Runnable active;

     SerialExecutor(Executor executor) {
         this.executor = executor;
     }

     public synchronized void execute(final Runnable r) {
         tasks.offer(new Runnable() {
             public void run() {
                 try {
                     r.run();
                 } finally {
                     scheduleNext();
                 }
             }
         });
         if (active == null) {
             scheduleNext();
         }
     }

     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {
             executor.execute(active);
         }
     }
 }

此包中提供的 Executor 实现实现了 ExecutorService,这是一个使用更广泛的接口。ThreadPoolExecutor 类提供一个可扩展的线程池实现。Executors 类为这些 Executor 提供了便捷的工厂方法。

  • 大小: 102.4 KB
分享到:
评论

相关推荐

    IBM_jdk1.5_Guide.zip_IBM jdk 1.5_aix_ibm java1.5_ibm jdk1.5 wind

    2. **Class Libraries**:IBM JDK 1.5包含了Java标准版(Java SE)的类库,这些类库提供了各种功能,如输入/输出处理、网络通信、多线程编程、数据加密等。此外,IBM可能还对部分类库进行了优化或增加了额外的功能以...

    JAVA开发工具 JDK1.5

    JDK1.5在编译器优化、垃圾收集、内存管理和多线程性能方面都有所改进,提升了整体的运行效率。 配置JDK1.5在Windows环境下,首先需要下载并解压文件`jdk1.5.0_05`,然后设置`JAVA_HOME`环境变量指向JDK的安装目录,...

    jdk1.5x64位 windows版.zip

    在并发编程方面,JDK1.5引入了并发工具类(java.util.concurrent),包括Semaphore、CyclicBarrier、CountDownLatch等,这些工具极大地简化了多线程编程中的同步和协调。 在内存模型和并发性能上,JDK1.5引入了Java...

    包含 jdk1.5免安装、jdk1.6免安装、jdk1.8(32和64)

    1. **Lambda表达式**:允许以简洁的方式表示匿名函数,极大地简化了多线程和函数式编程。 2. **函数式接口**:如`java.util.Function`,`java.util.Consumer`,为lambda表达式提供接口支持。 3. **Stream API**:...

    jdk1.5 windows 64位官方正式版,绝对有效

    对于并发编程,JDK1.5引入了java.util.concurrent包,其中包括了线程池、Future、Callable接口以及CyclicBarrier和Semaphore等同步工具类,极大地丰富了并发处理能力,提升了多线程环境下的性能和可维护性。...

    jdk1.5 64位 免安装

    在并发处理上,JDK1.5引入了并发工具类(java.util.concurrent),包括线程池(ExecutorService)、并发容器(如ConcurrentHashMap)以及Future接口等,这些工具极大地提高了多线程环境下的程序设计效率和性能。...

    IBMJDK1.5linux.zip

    在并发编程方面,JDK 1.5引入了并发工具类(java.util.concurrent package),如Executor框架、Semaphore、CountDownLatch和CyclicBarrier等,这些工具大大简化了多线程编程,提高了并发应用的效率和可靠性。...

    java多线程小示例(jdk1.5)

    java多线程小示例,

    jdk jdk1.5 windows系统

    12. **并发编程改进**:包括`java.util.concurrent`包的引入,提供了线程池、并发容器、并发工具类等,简化了多线程编程。 13. **XML支持的增强**:JAXB(Java Architecture for XML Binding)的引入,使得Java对象...

    历史版本JDK1.5安装包

    8. 遗留的和已删除的特性:JDK 1.5还移除了一些过时的API,如Vector和Hashtable,鼓励开发者使用更加线程安全的ArrayList和HashMap。 9. 类依赖性管理:通过引入ServiceLoader,可以方便地加载实现特定接口的类,...

    JDK1.5中文版

    例如,JVM引入了基于栈的并发垃圾收集器( Concurrent Mark Sweep Collector),提升了多线程环境下的性能。另外,Java I/O系统得到了增强,新增了NIO(New Input/Output)框架,提供了非阻塞I/O操作,适用于高并发...

    jdk1.5 java

    JDK 1.5引入了`java.util.concurrent`包,提供了线程安全的数据结构和并发编程工具,如`Executor`框架、`Future`接口、`Semaphore`、`CyclicBarrier`等,极大地简化了多线程编程。 ### 10. **Synchronized关键字...

    JDK1.5 中文版文档.rar

    9. **并发API(Concurrent APIs)**: JDK1.5加强了对多线程编程的支持,引入了并发工具类如`java.util.concurrent`包,包括`ExecutorService`、`Semaphore`、`CountDownLatch`等,以及`java.util.concurrent.atomic`...

    jdk1.5中文帮助文档

    9. **集合框架增强**:对Java集合框架进行了优化,包括更强大的List、Set和Map实现,以及新的并发集合类,如ConcurrentHashMap,适应多线程环境。 10. **异常链**:在处理异常时,可以创建异常链,记录并展示完整的...

    jdk1.5 for windows32 安装包

    安装程序"jdk1.5 for windows(32位)安装程序.exe"将引导用户完成配置步骤,包括选择安装目录、设置环境变量(如JAVA_HOME、PATH和CLASSPATH)以及选择是否创建桌面快捷方式。 请注意,由于JDK 1.5已经过时,可能...

    jdk1.5绿色版

    11. **并发工具类(Concurrent Utilities)**:在java.util.concurrent包中引入了许多新的并发控制工具,如Executor框架、Semaphore、CyclicBarrier等,提高了多线程编程的效率和可靠性。 12. **NIO.2(New I/O 2)...

    JDK 1.5 for Windows

    11. **内存模型的增强**:JDK 1.5对Java内存模型(JMM)进行了改进,确保了多线程环境下的正确性,例如volatile关键字的增强。 **安装JDK 1.5 for Windows**: 1. 下载`jdk-1_5_0_21-windows-i586-p.exe`安装文件...

    JDK1.5新特性

    10. **线程并发库**:JDK 1.5加强了对多线程编程的支持,提供了`java.util.concurrent`包,包含如`ExecutorService`、`Future`、`Semaphore`等工具类,使得并发编程更加高效和安全。 11. **二进制表示(二进制 ...

    jxl.jar与jdk1.5和jxl.jar与jdk1.6匹配

    到了JDK1.6,这个版本的JDK对内存管理和多线程有显著优化,理论上应该能更好地支持jxl.jar的运行。开发者可以利用JDK1.6的新特性,如并发工具类,来提升处理Excel文件的效率。但同样,需要进行兼容性测试,确保jxl....

    JDK1.5免安装

    引入了`java.util.concurrent`包,包含了线程池、并发集合等高效并发工具类,提升了多线程编程的效率和安全性。 通过这些特性,JDK1.5极大地提升了Java语言的表达能力和编程效率,为后来的Java版本奠定了坚实的...

Global site tag (gtag.js) - Google Analytics