【发布时间】:2014-09-24 08:39:54
【问题描述】:
调度程序在这里是如何工作的?它是否在后台创建一个新线程并像回调一样在主线程中执行 Run 方法。 ? .当run方法被执行时,它是否属于主线程?
classA implements Runnable
{
public void Run()
{
System.out.println(Thread.currentTread().getName());
}
public static void main(String args[])
{
Thread.currentThread().setName("Main");
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(this, 250, 250, TimeUnit.MILLISECONDS);
}
}
谢谢。
【问题讨论】:
-
“是否在后台创建新线程” 是和否。当您构造执行器时,它会创建并汇集一个线程。 “当run方法被执行时,它是否属于主线程?” - 不,它在执行器创建时创建的池
Thread中运行...... -
感谢您的帮助。我不知道 run() 在新创建的后台线程中执行。有没有办法可以在主线程中使用计时器或 ScheduledExecutorService 执行方法?
-
很多使用定时器的方法。如果你想使用 ScheduledExecutorService,你应该提供它 ThreadFactory,它返回当前线程。即 Executors.newSingleThreadScheduledExecutor((r) -> Thread.currentThread());
-
我需要做的是在定时器关闭时在主线程中执行一个方法(可能的 run() 方法)。
标签: java multithreading scheduledexecutorservice