简而言之,我想单击一个按钮来运行后台任务(单独的线程)。我面临两个问题:Singleton with Java multithreading app
- 如果什么用户点击上按钮多次 ==>多线程将被 创建。
- 即使我使用Singleton机制,我面临的另一个问题是,即使任务完成后只有一次该实例将被创建,但用户不能再重新运行该进程(第二次单击按钮)。
我的类:
package mypack.check;
public class RunnableCheck implements Runnable {
private Thread t;
private static RunnableCheckFeeders instance;
public RunnableCheckFeeders getDefault() {
if (instance == null) {
instance = new RunnableCheckFeeders();
}
return instance;
}
@Override
public void run() {
//What the thread is supposed to do...
}
public void start() {
if (t == null) {
t = new Thread(this, "My task");
t.start();
}
}
}
在主叫类:
RunnableCheckFeeders.getDefault().start();
我试图与同步的方法,但徒劳的,任何命题是值得欢迎的。
在线程完成加载之前,您不能禁用该按钮吗?在这种情况下,Java的'Future'可能很有用:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html。如果线程完成,您可以检查'Future '。 –
因为'getDefault'不是静态的,所以你需要创建'RunnableCheck'实例来调用'getDefault'来获取静态实例。因此,'RunnableCheckFeeders.getDefault()'甚至不能编译。 –
单击按钮时是否创建RunnableCheck的新实例? –