日期:2014-05-20 浏览次数:20686 次
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; public class Test { public static void main(String[] args) throws Exception{ List<Task> list = new ArrayList<Task>(); Task temp = null; for (int i = 0; i < 4; i++) { temp = new Task(i * 2, "第" + i + "线程"); list.add(temp); temp.start(); } while (!list.isEmpty()) { Iterator<Task> iterator = list.iterator(); while (iterator.hasNext()) { temp = iterator.next(); if (!temp.isAlive()) { iterator.remove(); } } TimeUnit.SECONDS.sleep(1); } System.out.println("所有任务执行完毕开始跳转"); } } class Task extends Thread { private int sleepTime; private String threadName; public Task(int sleepTime, String threadName) { this.sleepTime = sleepTime; this.threadName = threadName; } @Override public void run() { try { TimeUnit.SECONDS.sleep(sleepTime); System.out.println(threadName + "线程休眠" + sleepTime + "秒后结束执行"); } catch (Exception e) { e.printStackTrace(); } } }
------解决方案--------------------
join()方法就是干这个的。
比如:有两个线程,一个是主线程,另一个是新开的线程t。
主线程的代码如下:f1(); f2();
执行f2时,需要用到线程t中的数据,那么,这样就可以了:f1(); t.join(); f2();
jion()的作用就是合并线程,就是把两个线程的执行合并为了一个线程执行,执行顺序见上面的顺序。
解决问题,找到一个合适的、自己能理解的就可以了,不需要去研究太深,除非这个方法解决不了你的问题。
------解决方案--------------------
这个应该不需要什么特别的操作吧