我很惊讶,如何知道一个线程成功地完成了它的任务,然后只允许另一个线程执行?说明:假设我有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将等待为一个模块在循环中完成其任务,然后对循环中的另一个模块执行任务。请用代码给我建议,这样我才能更好地理解它。
发布于 2014-09-16 17:26:43
对于给定的需求,使用Thread.join()。对于使用同步、等待、通知来实现监视器的线程控制的更高级要求,还应该评估更高级别的api (java并发包)。
发布于 2014-09-16 12:52:20
您应该加入,这是您正在等待的线程。您可以在官方Java文档处理:http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html上阅读更多内容。
从这里开始:“联接方法允许一个线程等待另一个线程的完成。如果t是线程当前正在执行的线程对象。”
发布于 2014-09-16 12:55:08
如果您想自己处理任务的排序,可以使用Thread.join()。或者看看java.util.concurrent.Executors.newSingleThreadExecutor(),它可以依次为您完成任务。
https://stackoverflow.com/questions/25869223
复制相似问题