我写了一个类,我使用如下:
EventWrapperBuilder.newWrapperBuilder().
addSync(this::<some_method>).
addSync(this::<some_method>).
addSync(this::<some_method>).
addAsync(() -> <some_method>, Duration.ofSeconds(10)).
GET();
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
private final List<EventWrapper> _wrappers = new ArrayList<>();
public EventWrapperBuilder addSync(final Runnable task)
{
_wrappers.add(new EventWrapper(task, Duration.ZERO));
return this;
}
public EventWrapperBuilder addAsync(final Runnable task, final Duration duration)
{
_wrappers.add(new EventWrapper(task, duration));
return this;
}
/**
* @return {@code List} of all {@code Future}
*/
public List<Future<?>> GET()
{
final List<Future<?>> list = new ArrayList<>();
for (final EventWrapper wrapper : getWrappers())
{
if (!wrapper.getDuration().isZero())
{
list.add(ThreadPoolManager.getInstance().scheduleEvent(wrapper.getTask(), wrapper.getDuration().toMillis()));
}
else
{
wrapper.getTask().run();
}
}
return list;
}
/**
* @param builder
* @return {@code EventWrapperBuilder}
*/
public EventWrapperBuilder COMBINE(final EventWrapperBuilder builder)
{
_wrappers.addAll(builder.getWrappers());
return this;
}
/**
* @return {@code List} of all {@code EventWrapper}
*/
public List<EventWrapper> getWrappers()
{
return _wrappers;
}
//@formatter:off
private static record EventWrapper (Runnable getTask, Duration getDuration) {}
//@formatter:on
public static EventWrapperBuilder newWrapperBuilder()
{
return new EventWrapperBuilder();
}
Run Code Online (Sandbox Code Playgroud)
EventWrappers我的问题是:如果它是即时的,即持续时间为零,我每次执行此操作时是否都会创建一个新线程?
我显然知道
list.add(ThreadPoolManager.getInstance().scheduleEvent(wrapper.getTask(), wrapper.getDuration().toMillis()));
Run Code Online (Sandbox Code Playgroud)
创建一个线程并在预定时间后执行它,但是
wrapper.getTask().run();
Run Code Online (Sandbox Code Playgroud)
没有线程是实时的吗?我不希望我的代码创建线程,因此在执行时会很重run()。
不,调用run()Runnable 接口不会产生新线程。另一方面,当您使用 Thread 类包装 Runnable 并调用时start(),JVM 将生成一个新线程并在其上下文中执行 Runnable。
在您的代码中,只有异步任务会在单独的线程中运行,因为线程池正在管理它们的执行。
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |