Thread (執行緒)
阿新 • • 發佈:2018-11-24
Thread
使用新執行緒的步驟:
- 通過覆寫 Thread 的
run
方法,配置新執行緒需要做的事情 - 建立新執行緒物件
new YourThread()
- 開啟執行緒
start
建立新執行緒的方法有很多,下面是一個示例:
class MyThread extends Thread { @Override public void run () { System.out.println("在新的執行緒內執行的任務。這任務是獨立的,不會影響主執行緒程式碼執行。"); } }public class Main { public static void main (String... args) { Thread myThread = new MyThread(); // 建立執行緒 mythread.start(); // 執行執行緒 } }
也可以這樣:
class MyThread implements Runnable { @Override public void run () { System.out.println("在新的執行緒內執行的任務。這任務是獨立的,不會影響主執行緒程式碼執行。"); } }public class Main { public static void main (String... args) { Thread myThread = new Thread(new MyThread()); // 建立執行緒 mythread.start(); // 執行執行緒 } }
上面程式碼可以簡寫為:
// 使用匿名內部類進行簡化 public class Main { public static void main (String... args) { Thread myThread= new Thread () { @Override public void run () { System.out.println("在新的執行緒內執行的任務。這任務是獨立的,不會影響主執行緒程式碼執行。"); } }; myThread.start(); } }
使用 jdk8 的語法,甚至可以簡化為:
public class Main { public static void main (String... args) { new Thread(() -> System.out.println("task")).start(); } }
其他:
- t.join()
- 讓當前執行緒阻塞並等待執行緒 t 結束再執行接下來程式碼
- Thread.sleep()
- 讓當前執行緒暫時休眠 n 毫秒,這過程不會釋放所佔用的物件鎖
- Thread.yield()
- 暫時退讓,優先讓其他執行緒先執行。如果沒有執行緒在這個過程中搶佔執行權,則繼續執行
- Executors 是一個常用的靜態類,內建了很多執行緒池相關的操作。
-
執行緒池使用的基本語法:
// 1. 建立執行緒池 ExecutorService service = Executors.newCachedThreadPool(); // 2. 建立任務 Runnable task = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread()); } }; // 3. 使用執行緒池排程任務 for (int i = 0; i < 1000; i++) { service.execute(task); } // 4. 關閉執行緒池 service.shutdown();
可以簡化為:
ExecutorService service = Executors.newCachedThreadPool(); for (int i = 0; i < count; i++) { service.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread()); } }); }
可以進一步簡化為(jdk8語法):
ExecutorService service = Executors.newCachedThreadPool(); for (int i = 0; i < count; i++) { service.execute(() -> System.out.println(Thread.currentThread())); }