您的位置:首页 > 移动开发 > Android开发

android开发教程关于使用java concurrent处理并发需求

2014-03-13 10:30 489 查看
  android开发教程之使用java concurrent处理并发需求

  java5开始,增加了concurrent api,用于并发处理。比如起多个线程并发从网络上下载图片,然后在本地显示。

  这里写个简单的代码,来说明如何使用concurrent api提供的线程连接池。

  运行结果类似这样:

  start do 1 task …

  >>main thread end.

  start do 2 task …

  start do 1 finished.

  start do 3 task …

  start do 2 finished.

  start do 3 finished.

  复制代码

  这里的task1到task3,都做的同样的事情,让它所属的线程休眠2000ms:

  private static void doSomething(int id) {

  System.out.println("start do " + id + " task …");

  try {

  Thread.sleep(1000 * 2);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("start do " + id + " finished.");

  }

  复制代码

  如果没有java自带的这个api,需要自己或者使用不标准的第三方线程池api。用concurrent api写起来很简洁:

  public static void main(String[] args) {

  ExecutorService executorService = Executors.newFixedThreadPool(2);

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(1);

  }

  });

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(2);

  }

  });

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(3);

  }

  });

  executorService.shutdown();

  System.out.println(">>main thread end.");

  }

  复制代码

  首先,创建了一个线程池,里面有2个线程:

  ExecutorService executorService = Executors.newFixedThreadPool(2);

  复制代码

  然后,通过submit()方法,提交一个Runnable的实例,这个实例将交由线程池中空闲的线程执行。

  在main线程中直接运行了:

  executorService.shutdown();

  复制代码

  不必担心,线程池不会直接关闭的,只有当它执行完所有提交的任务后才会关闭。如果不写这行,在本例中,应用将不会停止,因为虽然main线程(就是运行main方法的线程,也叫主线程)退出了,但是线程池中依然有线程运行,因此应用(进程)不会退出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: