Java util.Timer 获取任务执行线程

Java util.Timer get Task Execution Thread

有没有办法获取 TimerTask 将 运行 开启的线程?

public class Main {

    static Thread gameThread= null;

    public static void main(String[] args) throws Exception {
        Timer t = new Timer();

        t.schedule(new TimerTask(){
            {
                gameThread = Thread.currentThread();
                System.out.println(Thread.currentThread());//this will only give main thread back
            }
            @Override
            public void run() {
                gameThread = Thread.currentThread();//unnecessary to run every time


            }

        }, 0,15);
    }
}

我知道这会起作用,因为 运行 方法在每个例程中声明线程,但这似乎效率低下。有没有一种方法可以获得任务将持续 运行 一次的线程?它不会在 TimerTask 的构造函数或初始化程序中工作,因为那些 运行 在主线程上。

如果您愿意使用 ScheduledExecutorService 而不是计时器(Java 并发实践中推荐),这实际上非常简单:

public class Main {

    static Thread gameThread= null;

    public static void main(String[] args) throws Exception {
        ScheduledExecutorService service = Executors.newScheduledThreadPool(1 /*single-threaded executor service*/,
             new ThreadFactory(){
                  public Thread newThread(Runnable r){
                      gameThread = new Thread(r);
                      System.out.println(gameThread);
                      return gameThread;
                  }
        });


        service.scheduleAtFixedRate(new Runnable(){
            @Override
            public void run() {
                /*do stuff*/
            }

        }, 0,15,TimeUnit.MILLISECONDS);
    }
}

相关文档链接: