簡而言之,我想單擊一個按鈕來運行後臺任務(單獨的線程)。我面臨兩個問題: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的新實例? –