1.join方法
static Thread thread1 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread1");
}
});
static Thread thread2 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread2");
}
});
static Thread thread3 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread3");
}
});
public static void main(String[] args) throws InterruptedException {
thread1.start();
thread1.join();
thread2.start();
thread2.join();
thread3.start();
}
由于直接调用join()方法时,底层调用的为Object的wait方法.
2.ExecutorService executor = Executors.newSingleThreadExecutor();
static Thread thread1 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread1");
}
});
static Thread thread2 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread2");
}
});
static Thread thread3 =new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread3");
}
});
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(thread1);
executor.submit(thread2);
executor.submit(thread3);
}
利用并发包里的Excutors的newSingleThreadExecutor产生一个单线程的线程池,而这个线程池的底层原理就是一个先进先出(FIFO)的队列。代码中executor.submit依次添加了123线程,按照FIFO的特性,执行顺序也就是123的执行结果,从而保证了执行顺序 。注:该方法在JDK1.5之后才引入