基础辅导:Java5并发学习
来源:优易学  2011-11-29 13:22:45   【优易学:中国教育考试门户网】   资料下载   IT书店

  在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。
  一、创建任务
  任务就是一个实现了Runnable接口的类。
  创建的时候实run方法即可。
  二、执行任务
  通过java.util.concurrent.ExecutorService接口对象来执行任务,该接口对象通过工具类java.util.concurrent.Executors的静态方法来创建。
  Executors此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。
  ExecutorService提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。 可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。
  executorService.execute(new TestRunnable());
  1、创建ExecutorService
  通过工具类java.util.concurrent.Executors的静态方法来创建。
  Executors此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。
  比如,创建一个ExecutorService的实例,ExecutorService实际上是一个线程池的管理工具:
  ExecutorService executorService = Executors.newCachedThreadPool();
  ExecutorService executorService = Executors.newFixedThreadPool(3);
  ExecutorService executorService = Executors.newSingleThreadExecutor();  
  2、将任务添加到线程去执行
  当将一个任务添加到线程池中的时候,线程池会为每个任务创建一个线程,该线程会在之后的某个时刻自动执行。
  三、关闭执行服务对象
  executorService.shutdown();
  四、综合实例
  package concurrent;
  import java.util.concurrent.ExecutorService;
  import java.util.concurrent.Executors;
  public class TestCachedThreadPool {
  public static void main(String[] args) {
  // ExecutorService executorService = Executors.newCachedThreadPool();
  ExecutorService executorService = Executors.newFixedThreadPool(5);
  // ExecutorService executorService = Executors.newSingleThreadExecutor();
  for (int i = 0; i < 5; i++) {
  executorService.execute(new TestRunnable());
  System.out.println("************* a" + i + " *************");
  }
  executorService.shutdown();
  }
  }
  class TestRunnable implements Runnable {
  public void run() {
  System.out.println(Thread.currentThread().getName() + "线程被调用了。");
  while (true) {
  try {
  Thread.sleep(5000);
  System.out.println(Thread.currentThread().getName());
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  }
  }
  运行结果:
  ************* a0 *************
  ************* a1 *************
  pool-1-thread-2线程被调用了。
  ************* a2 *************
  pool-1-thread-3线程被调用了。
  pool-1-thread-1线程被调用了。
  ************* a3 *************
  ************* a4 *************
  pool-1-thread-4线程被调用了。
  pool-1-thread-5线程被调用了。
  pool-1-thread-2
  pool-1-thread-1
  pool-1-thread-3
  pool-1-thread-5
  pool-1-thread-4
  pool-1-thread-2
  pool-1-thread-1
  pool-1-thread-3
  pool-1-thread-5
  pool-1-thread-4
  ......

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训