我有簡單的調用線程哪些做簡單的工作。當條件滿足時
我想調用或通知基類(啓動線程的那個)
工作完成。
這樣做的最好方法是什麼?Java如何在作業完成後調用或通知調用類?
class TaskThread implements Runnable
{
private int result = -1;
public TaskThread()
{
}
//must be thread safe
public synchronized int getResult()
{
return result;
}
@Override
public void run() {
if(result==-1 || result < 0)
{
StartFoo();
result = InvokeAPI();
if(result == 1)
{
// HERE i like to do something to notify the outside world that the job is done ...
}
}
}
}
//Base class
public class ScheduledThreadsManager {
private static ScheduledThreadsManager instance = null;
private ScheduledExecutorService scheduler;
private Runnable pTaskThread = null ;
protected ScheduledThreadsManager()
{
}
//must be set only once in the app life cycle
public void Init(int corePoolSize,
long TimeUnitINSeconds)
{
pTaskThread = new TaskThread();
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(pTaskThread,1,TimeUnitINSeconds,TimeUnit.SECONDS);
}
public int getResult()
{
return pTaskThread.;
}
// Runtime initialization
// By defualt ThreadSafe
public static ScheduledThreadsManager getInstance() {
if(instance == null){
synchronized (ScheduledThreadsManager.class) {
if(instance == null){
instance = new ScheduledThreadsManager();
}
}
}
return instance;
}
public void ShutdownNow()
{
pTaskThread = null ;
scheduler.shutdown();
}
}
現在這就是我稱之爲:
//somewhere in the code
ScheduledThreadsManager.getInstance().init(1,10);
int runThis = true;
while(runThis)
{
int ifOne = ScheduledThreadsManager.getInstance().getResult()
if(ifOne==1)
{
runThis = false;
ScheduledThreadsManager.getInstance().ShutdownNow()
}
}
林不知道,是最好的方法,我可以以某種方式可以從TaskThread run方法方法和更新ScheduledThreadsManager?
http://www.javaworld.com/article/2077462/learn-java/java-tip- 10 - 執行回調 - 例程in-java.html首先命中「Java回調」:D – Fildor
但是,你正在嚴重overcoding這一點。你可以用Executor和Futures做所有你想要的。參見'submit'。請注意,執行程序的關閉只能確保不能添加新的任務。 – Fildor