0

我正在尝试执行以下操作 -

  1. 创建了一个线程
  2. 创建新线程时,它会更新前一个线程的变量limit
  3. 第三个线程的进度重复,即该线程更新limit线程 ID1 和 ID2 的变量。

这是一些示例代码

主班

public class TaskImplementer {
    public static int End;
    public static int threadCount = 5;

    public static void main(String[] args) {
    int i=0;

    findEnd();

    while (i < threadCount) {
        if(isPossible()) {      // check for some condition
        createThread aThread = new createThread(i, End);
        aThread.start();
        }
        i++;
        //updateGUI();  //updateGUI - show working Threads
    }
    }

    private static void findEnd() {
    //updates End variable
    }

    private static boolean isPossible() {
    //.....
    //Check for a condition
    return false;

    }
}

创建线程类

public class createThread extends Thread {
    private static int ID;
    private static int limit;
    private static int startfromSomething;

    public createThread(int ThreadID, int End) {
    ID = ThreadID;
    limit = End;
    }

    private void doSomething() {
    //does work
    }

    @Override
    public void run() {

    while(startfromSomething < limit) {
        doSomething();
    }
    TaskImplementer.i--;
    }

}

limit成功创建后,每个线程都需要更新该变量。有可能吗,请提出一些建议。提前致谢。

4

3 回答 3

0

根据您在步骤中给出的逻辑,您可以创建一个 CreateThread 数组并设置 id 和 limit 的参数。

public class TaskImplementer {
    static int End;
    static int threadCount = 5;

    public static void main(String[] args) {
        int i = 0;
        CreateThread[] tasks = new CreateThread[threadCount];
        while (i < threadCount) {
            int j = 0;
            while (j <= i) {

                if (tasks[j] != null) {
                    // Set ID and limit
                    tasks[j] = new CreateThread(j, End);
                    tasks[j].start();
                }
                j++;
            }
            i++;
        }
    }
}
于 2012-10-20T17:22:06.987 回答
0

问题显然是由于您在不应该使用的地方使用了“静态”!它应该是这样的:

public class CreateThread extends Thread {
   private int ID;
   private int limit;
   private static int startfromSomething; //Don't know about this one. If this value is the same for every thread, "static" is correct. Otherwise remove "static".

   public createThread(int ThreadID, int End) {
      ID = ThreadID;
      limit = End;
   }
}

如果您想在此类的所有实例和静态内容之间共享一个字段,则使用“静态”。

还有一件事:Java 代码约定希望您的类名以大写字母开头。

于 2012-10-20T17:33:33.117 回答
0

我认为您应该在 createThread 类中包含原子整数,并且还应该通过列表保存可用线程(createThread)对象,然后每次要运行另一个线程时,您必须将其添加到列表中,同时减少或增加限制变量其他正在运行的线程通过它们在线程列表中的引用,我的意思是你必须实现类似线程池的东西。

于 2012-10-20T10:51:37.350 回答