我很震惊如何知道一个线程成功完成了它的任务,然后只允许另一个线程执行? 说明:假设我有10个模块。但是线程应该按顺序完成任务。完全完成一个模块的请求后,只有它应该跳转到下一个模块。
以下是我的代码:
SiaThread.java
Collection <Modulo> modules = mppt.getModuloCollection();
for(Module module:modules){
UriThread threadUri = new UriThread(UriThread.URI_ENERGY_DAY,uriPath,"GET",semapore, module, gduSemapore,devType);
UriThread threadUriFault = new UriThread (UriThread.URI_FAILURE, uriPath, "GET", semapore, module, gduSemapore,devType);
}
UriThread.java
public UriThread (int iType, String strBaseUrl, String strmethod, Semaphore objsemaphore, Modulo module, GduSemaphore gduSemapore,String devType) {
this.iUriType = iType;
this.iRetry = 0;
this.strBaseUrl = strBaseUrl;
this.strMethod = strmethod;
this.semaphore = objsemaphore;
this.gduSemapore = gduSemapore;
this.modulo = module;
this.strResponse = "";
this.devType=devType;
setState (URI_FORMATION);
threadUrl = new Thread(this);
threadUrl.start();
}
任务需要一个接一个地完成,如果线程没有完成任务,那么它应该等待。
.Here semapore=new Semapore(10,true);
问题的更多解释:一个SiaThread就在里面,上面两个线程正在运行。我希望SiaThread将等待在一个模块的循环中完成其任务,然后在循环中为另一个模块执行任务。请给我一些代码的建议,以便我能更好理解。
答案 0 :(得分:1)
您应加入您正在等待的主题。您可以阅读官方Java文档:http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html
从那里:“join方法允许一个线程等待另一个线程的完成。如果t是一个Thread对象,其线程当前正在执行。”
答案 1 :(得分:0)
如果您想自己处理任务排序,请使用Thread.join()
。或者查看java.util.concurrent.Executors.newSingleThreadExecutor()
,它可以为您顺序完成任务。
答案 2 :(得分:0)
对于给定的要求,请使用Thread.join()。对于线程控制的更高级要求,使用synchronized,wait,notify来实现监视器;还应评估更高级别的api(java并发包)。