如何确保线程完成其任务,那么只有新的Thread可以在java中启动?

时间:2014-09-16 12:48:52

标签: java multithreading

我很震惊如何知道一个线程成功完成了它的任务,然后只允许另一个线程执行?     说明:假设我有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将等待在一个模块的循环中完成其任务,然后在循环中为另一个模块执行任务。请给我一些代码的建议,以便我能更好理解。

3 个答案:

答案 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并发包)。