看板 java 關於我們 聯絡資訊
自從Java SE5後,提供了Executors管理Thread, 但是對於一些執行上的問題,我還是有一些疑惑,以下是測試程式碼: public class ThreadTest { public static void main(String[] args) { ThreadTest t = new ThreadTest(); ExecutorService exec = Executors.newFixedThreadPool( 1, t.new MyThreadFactory()); for (int i=0;i<5;i++) { exec.execute(t.new MyRunnable(i)); } exec.shutdown(); } public class MyThread extends Thread { private int id; public MyThread(Runnable r, int id) { super(r); this.id = id; } public void run() { super.run(); System.out.println("Thread ID: " + this.id); } } public class MyRunnable implements Runnable { private int id; public MyRunnable(int id) { this.id = id; } @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("Runnable ID: " + this.id); } } public class MyThreadFactory implements ThreadFactory { private int id; public MyThreadFactory() { this.id = 0; } @Override public Thread newThread(Runnable r) { MyThread t = new MyThread(r, id++); return t; } } } 例子中,我丟了五個Runnable進ExecutorService執行,對於ThreadPool我不是很了解。 ThreadFactory產生了一個Thread,他會把五個Runnable都印完之後, 才會印他自己的ID。可是感覺上應該是一個Thread對到一個Runnable, 怎麼會五個Runnable都丟給了同一個Thread去執行呢? 它是怎麼做到讓五個Runnable的run()疊在一起變成super.run()? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.86.99
LaPass:大概是一些block之類的例如lock、wait那些東西 11/21 14:27
cowbaying:直接看ExecutorService是怎麼寫的就好了不是? 11/21 20:50
samtree:建議你看一下 Executors.newFixedThreadPool 的API 11/21 21:22
samtree:把第一個參數的解釋看懂 你就知道為什麼你只有1個Thread 11/21 21:24
FrankWOO:二樓大大建議我會去看的 11/22 09:59
FrankWOO:三樓大大 我已經看過了 他用ThreadPoolExecutor產生限制 11/22 10:01
FrankWOO:Thread數量,但是他怎麼拿取BlockingQueue東西的實作 11/22 10:06