多執行緒例子:yield
阿新 • • 發佈:2019-01-30
Java程式碼
執行結果是:
Java程式碼
yield本意是讓步,但是看這個結果,似乎並沒有起到什麼效果。起碼是看不出來有什麼用處。
事實上,Thread中yield()是讓當前執行緒暫停,交出CPU,轉入可執行狀態,讓系統的執行緒排程器重新排程一次。再次排程時,哪個執行緒都有可能被排程。
yield() 使得執行緒放棄當前分得的 CPU 時間,但是不使執行緒阻塞,即執行緒仍處於可執行狀態,隨時可能再次分得 CPU 時間。
- public class Test {
- public static void main(String[] args) {
- Thread t1 = new MyThread1();
- Thread t2 = new Thread(new MyRunnable());
- t2.start();
- t1.start();
- }
- }
- class MyThread1 extends Thread {
- public void run() {
-
for (int i = 0
- System.out.println("執行緒1第" + i + "次執行!");
- // try {
- // Thread.sleep(1000);
- // } catch (InterruptedException e) {
- // // TODO Auto-generated catch block
- // e.printStackTrace();
- // }
- }
- }
- }
-
class
- public void run() {
- for (int i = 0; i < 10; i++) {
- System.out.println("執行緒2第" + i + "次執行!");
- Thread.yield();
- }
- }
- }
執行結果是:
Java程式碼
- 執行緒2第0次執行!
- 執行緒1第0次執行!
- 執行緒2第1次執行!
- 執行緒1第1次執行!
- 執行緒2第2次執行!
-
執行緒1
- 執行緒2第3次執行!
- 執行緒1第3次執行!
- 執行緒2第4次執行!
- 執行緒1第4次執行!
- 執行緒2第5次執行!
- 執行緒1第5次執行!
- 執行緒2第6次執行!
- 執行緒2第7次執行!
- 執行緒2第8次執行!
- 執行緒1第6次執行!
- 執行緒2第9次執行!
- 執行緒1第7次執行!
- 執行緒1第8次執行!
- 執行緒1第9次執行!
yield本意是讓步,但是看這個結果,似乎並沒有起到什麼效果。起碼是看不出來有什麼用處。
事實上,Thread中yield()是讓當前執行緒暫停,交出CPU,轉入可執行狀態,讓系統的執行緒排程器重新排程一次。再次排程時,哪個執行緒都有可能被排程。
yield() 使得執行緒放棄當前分得的 CPU 時間,但是不使執行緒阻塞,即執行緒仍處於可執行狀態,隨時可能再次分得 CPU 時間。