作者FrankWOO (喵!就是这样!)
看板java
标题[问题] 关於Executor运作原理
时间Wed Nov 21 14:08:45 2012
自从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
1F:推 LaPass:大概是一些block之类的例如lock、wait那些东西 11/21 14:27
2F:推 cowbaying:直接看ExecutorService是怎麽写的就好了不是? 11/21 20:50
3F:→ samtree:建议你看一下 Executors.newFixedThreadPool 的API 11/21 21:22
4F:→ samtree:把第一个参数的解释看懂 你就知道为什麽你只有1个Thread 11/21 21:24
5F:→ FrankWOO:二楼大大建议我会去看的 11/22 09:59
6F:→ FrankWOO:三楼大大 我已经看过了 他用ThreadPoolExecutor产生限制 11/22 10:01
7F:→ FrankWOO:Thread数量,但是他怎麽拿取BlockingQueue东西的实作 11/22 10:06