如何理解 Java API 文档中的这个接口执行器示例
how to understand this interface Executor example in Java API docs
谁能帮忙详细解释一下这段代码?
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
我正在学习 java 并发编程。当我查看这段代码时,我感到迷茫。主要有两点让我困惑:
- 为什么要在 Executor 中定义
Executor executor
,这是如何工作的?
- 在
public synchronized void execute(final Runnable r)
中它创建 new Runnable(){}
并在这些 Runnable 中调用 Runnable r.run()?这是什么?
- why define Executor executor inside Executor, how this works?
SerialExecutor
是一个使用装饰器模式的包装器实现。您可以使用 Executor
接口的任何实现实例化它,或者您可以将它作为参数传递给需要 Executor
的地方。
例如:-
SerialExecutor se = new SerialExecutor(Executors.newFixedThreadPool(10));
Executor anotherExecutor = se;
有关详细信息,请参阅 Executors
class Java API 文档
- In
public synchronized void execute(final Runnable r)
it create new Runnable(){}
and in these Runnable, it call Runnable r.run()?
what is this?
在上面的方法中,r.run()
在一个新的 Runnable
实例中被调用,因为在调用 r.run()
的最后,finally 块中需要 scheduleNext()
方法来被调用。
谁能帮忙详细解释一下这段代码?
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
我正在学习 java 并发编程。当我查看这段代码时,我感到迷茫。主要有两点让我困惑:
- 为什么要在 Executor 中定义
Executor executor
,这是如何工作的? - 在
public synchronized void execute(final Runnable r)
中它创建new Runnable(){}
并在这些 Runnable 中调用 Runnable r.run()?这是什么?
- why define Executor executor inside Executor, how this works?
SerialExecutor
是一个使用装饰器模式的包装器实现。您可以使用 Executor
接口的任何实现实例化它,或者您可以将它作为参数传递给需要 Executor
的地方。
例如:-
SerialExecutor se = new SerialExecutor(Executors.newFixedThreadPool(10));
Executor anotherExecutor = se;
有关详细信息,请参阅 Executors
class Java API 文档
- In
public synchronized void execute(final Runnable r)
it create newRunnable(){}
and in these Runnable, it call Runnabler.run()?
what is this?
在上面的方法中,r.run()
在一个新的 Runnable
实例中被调用,因为在调用 r.run()
的最后,finally 块中需要 scheduleNext()
方法来被调用。