中文JAVA技术平等自由协作创造

Java专题文章博客和开源

常用链接

统计

最新评论

Java实现主线程等待子线程

  本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:
  1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。
  2、使用java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进程,直到倒数至0.
  join方式代码如下:
  package com.test.thread;
  import java.util.ArrayList;
  import java.util.List;
  public class MyThread extends Thread
  {
  public MyThread(String name)
  {
  this.setName(name);
  }
  @Override
  public void run()
  {
  System.out.println(this.getName() + " staring…");
  System.out.println(this.getName() + " end…");
  }
  /**
  * @param args
  */
  public static void main(String[] args)
  {
  System.out.println("main thread starting…");
  List<MYTHREAD> list = new ArrayList<MYTHREAD>();
  for (int i = 1; i <= 5; i++)
  {
  MyThread my = new MyThread("Thrad " + i);
  my.start();
  list.add(my);
  }
  try
  {
  for (MyThread my : list)
  {
  my.join();
  }
  }
  catch (InterruptedException e)
  {
  e.printStackTrace();
  }
  System.out.println("main thread end…");
  }
  }
  运行结果如下:
  main thread starting…
  Thrad 2 staring…
  Thrad 2 end…
  Thrad 4 staring…
  Thrad 4 end…
  Thrad 1 staring…
  Thrad 1 end…
  Thrad 3 staring…
  Thrad 3 end…
  Thrad 5 staring…
  Thrad 5 end…
  main thread end…
  CountDownLatch方式代码如下:
  package com.test.thread;
  import java.util.concurrent.CountDownLatch;
  public class MyThread2 extends Thread
  {
  private CountDownLatch count;
  public MyThread2(CountDownLatch count, String name)
  {
  this.count = count;
  this.setName(name);
  }
  @Override
  public void run()
  {
  System.out.println(this.getName() + " staring…");
  System.out.println(this.getName() + " end…");
  this.count.countDown();
  }
  /**
  * @param args
  */
  public static void main(String[] args)
  {
  System.out.println("main thread starting…");
  CountDownLatch count = new CountDownLatch(5);
  for (int i = 1; i <= 5; i++)
  {
  MyThread2 my = new MyThread2(count, "Thread " + i);
  my.start();
  }
  try
  {
  count.await();
  }
  catch (InterruptedException e)
  {
  e.printStackTrace();
  }
  System.out.println("main thread end…");
  }
  }
  运行结果如下:
  main thread starting…
  Thread 2 staring…
  Thread 2 end…
  Thread 4 staring…
  Thread 4 end…
  Thread 1 staring…
  Thread 1 end…
  Thread 3 staring…
  Thread 3 end…
  Thread 5 staring…
  Thread 5 end…
  main thread end…托福答案

posted on 2014-08-25 22:00 好不容易 阅读(181) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
PK10开奖 PK10开奖