多執行緒並行執行與順序執行(一)
阿新 • • 發佈:2018-12-19
package test; import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 通過 join()方法並行執行執行緒。 * @author Smile */ public class ThreadJoinTest { public static void main(String[] args) throws InterruptedException { test1(); test2(); test3(); } public static void test1() throws InterruptedException { mThread t1 = new mThread("t1--------"); mThread t2 = new mThread("t2"); t1.start(); /** t1.join(); join()不傳遞引數,表示t1執行緒執行完成之後執行t2執行緒。 * * t1.join(10); join()傳遞引數,join(10)表示主執行緒會等待t1執行緒10毫秒,10毫秒過去後, * 主執行緒和t1執行緒之間執行順序由序列執行變為普通的並行執行。 * * (個人認為這種方式在非main方法中使用,存線上程進行中,方法結束導致執行緒終止的情況。) */ t1.join(10); t2.start(); System.out.println("執行完畢!----------test1-----------"); } public static void test2() throws InterruptedException { Vector<Thread> vectors=new Vector<Thread>(); mThread t1 = new mThread("t1-----"); mThread t2 = new mThread("t2"); t1.start(); t2.start(); vectors.add(t1); vectors.add(t2); /** * 經過for迴圈遍歷,兩個執行緒會並行執行,並在兩個執行緒都執行完畢後,執行主執行緒。 */ for (Thread thread : vectors) { thread.join(); } System.out.println("執行完畢!-----------test2------------"); } /** * 通過 執行緒池 */ public static void test3() throws InterruptedException { final Thread t1 = new Thread(new Runnable() { public void run() { for (int i = 1; i <= 100; i++) { System.out.println("---t1---"); } } }); final Thread t2 = new Thread(new Runnable() { public void run() { for (int i = 1; i <= 100; i++) { System.out.println("---t2---"); } } }); final Thread t3 = new Thread(new Runnable() { public void run() { for (int i = 1; i <= 100; i++) { System.out.println("---t3---"); } } }); // 此方法使用 單個任務的執行緒池來實現。保證執行緒的依次執行 ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(t1); executor.submit(t2); executor.submit(t3); executor.shutdown(); // 結束程序 } } class mThread extends Thread{ public mThread(String name){ super(name); } @Override public void run(){ for(int i=1;i<=1000;i++){ System.out.println(this.getName() + "--------" + i); } } }