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);
}
}
相关文档链接:
有没有办法获取 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);
}
}
相关文档链接: