java - 单次后台线程,避免连接?

标签 java multithreading

简单的问题,此代码是否有效,并且不会留下任何类型的资源泄漏:

    // code...
    final int delaySecs = 60;
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(delaySecs * 1000);
                // code to do whatever delayed single-shot action
            } catch (InterruptedException ex) { /* skip action */ }
        }
    }).start();
    // more code...

如果它无效,我应该使用这样的 Thread 子类来启用 setDaemon(true) 调用:

class DaemonThread extends Thread {
    public DaemonThread(Runnable target) {
        super(target);
        setDaemon(true);
    }
}

还是别的什么?

最佳答案

Java 从 1.5 开始就为您的用例提供了特定的支持,因此最好建议您使用它:

ScheduledExecutorService s = Executors.newScheduledThreadPool(1);
s.schedule(new Runnable() { ...my task, no Thread.sleep()... },
   1, TimeUnit.MINUTES);
s.shutdown();

这将实现适当的延迟并负责事后的清理。

关于java - 单次后台线程,避免连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14232247/

相关文章:

java - java中从服务器向多个客户端发送消息

java - 添加新项目时, TableView 不会自动更新

java - 如何将 JConsole 连接到远程 JVM?

c# - 是否可以限制 EventWaitHandle 的设置/重置?

c# - 等待另一个线程

python - 是否有任何内置函数会阻塞 I/O 而不允许其他线程运行?

Java - 一种采用可变参数并返回数组列表的方法?

java - 应用程序引擎中的移动子域

java - 如何模拟行 Integer.Parseint(authenticationmap.get ("userid");

c# - 如何只让一个线程运行关键部分,同时丢弃其他线程而不挂起