两种方法:
假设如下:
如果有a,b,c三个线程,我们依次执行这三个线程。因为不保证有序性,可能执行出来是混乱的
解决如下:
第一种使用join()方法,这个方法的作用是,让当前执行线程等待直到调用join方法的线程结束运行
代码如下:
class Thread1 extends Thread{
public void run(){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Threada");
}
}
class Thread2 extends Thread{
public void run(){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Threadb");
}
}
class Thread3 extends Thread{
public void run(){
System.out.println("Threadc");
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread1 thread1=new Thread1();
thread1.start();
thread1.join();
Thread2 thread2=new Thread2();
thread2.start();
thread2.join();
Thread3 thread3=new Thread3();
thread3.start();
// ExecutorService executorService=Executors.newSingleThreadExecutor();
// executorService.execute(thread1);
// executorService.execute(thread2);
// executorService.execute(thread3);
// executorService.shutdown();
}
}
第二种是通过线程池里的方法:我们使用单线程池,这样就能根据传入的顺序执行线程。
package didi;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Thread1 extends Thread{
public void run(){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Threada");
}
}
class Thread2 extends Thread{
public void run(){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Threadb");
}
}
class Thread3 extends Thread{
public void run(){
System.out.println("Threadc");
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread1 thread1=new Thread1();
// thread1.start();
// thread1.join();
Thread2 thread2=new Thread2();
// thread2.start();
// thread2.join();
Thread3 thread3=new Thread3();
// thread3.start();
ExecutorService executorService=Executors.newSingleThreadExecutor();
executorService.execute(thread1);
executorService.execute(thread2);
executorService.execute(thread3);
executorService.shutdown();
}
}