【发布时间】:2014-09-16 12:48:52
【问题描述】:
我很惊讶如何知道一个线程成功完成了它的任务,然后只允许另一个线程执行? 说明:假设我有 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 将等待在一个模块的循环中完成其任务,然后在循环中为另一个模块执行任务。请用代码给我建议,以便我更好地理解它。
【问题讨论】:
-
如果你想让两个动作顺序执行,你应该在同一个线程中执行它们。
-
阅读此docs.oracle.com/javase/tutorial/essential/concurrency/join.html。我希望这会对你有所帮助。
-
你好Peter Lawrey,对于一个模块,任务可以同时发生,但是在一个模块的两个线程完成后,它们应该转到下一个模块。
-
@Rasmitapatra 那么这是一个不同的问题。
-
如果您希望两个或更多线程按顺序运行,请使用 thread.join()。但我希望您想要的不是所有线程都按顺序运行,而是一个特定线程的完成取决于另一个线程。
标签: java multithreading