java中的线程数组

Sye*_*her 2 c# java multithreading

我需要知道java中的线程数组.这是C#中线程数组的代码

  Thread[] TCreate = new Thread[iThreadSize];
        for (int i = 0; i < TCreate.Length; i++)
        {
            TCreate[i] = new Thread(delegate()
                {
                    lst.Add(this.getResult(url));
                });
            TCreate[i].Name = "URL"+i;
            TCreate[i].Start();

        }
        for(int j=0;j<TCreate.Length;j++)
            while (TCreate[j].IsAlive)
            Thread.Sleep(10);
Run Code Online (Sandbox Code Playgroud)

我需要知道在java中这样做.

MyTestClass qryCompoents=new MyTestClass();
for(int i=0;i<ThreadSize;i++)
        {

            switch(obj.getQueryLevelValue(i))  //Decide according to level
            {
            case 1:
                    qryCompoents.prepareAndProcess_I(obj.getQueryString(i),obj,i);
                    break;
            case 2:
                    qryCompoents.prepareAndProcess_II(obj.getQueryString(i),obj,i);
                    break;

            }               

        }
Run Code Online (Sandbox Code Playgroud)

如果您需要任何细节,请告诉我.

如果我转换这个

    Thread[] TCreate = new Thread[numExpression];

        for(int i=0;i<numExpression;i++)
        {
             TCreate[i] = new Thread(new Runnable() {
                    public void run() {
                        switch(obj.getQueryLevelValue(i))  //Decide according to level
                        {
                        case 1:
                                qryCompoents.prepareAndProcess_I(obj.getQueryString(i),obj,i);
                                break;
                        case 2:
                                qryCompoents.prepareAndProcess_II(obj.getQueryString(i),obj,i);
                                break;

                        }           
                    }
                });
                TCreate[i].setName("URL"+i);
                TCreate[i].start();         
        }
          for (int j = 0; j < TCreate.length; j++)
                while (TCreate[j].isAlive())
                     Thread.sleep(5);
Run Code Online (Sandbox Code Playgroud)

显示错误:无法引用在不同方法中定义的内部类中的非最终变量"obj"

提前致谢

dac*_*cwe 5

这非常类似.而不是deligates java有一个Runnable接口,而不是C#的Name属性java有setName方法.除此之外,差异很小:

Thread[] TCreate = new Thread[iThreadSize];
for (int i = 0; i < TCreate.length; i++) {

    TCreate[i] = new Thread(new Runnable() {
        public void run() {
            lst.Add(this.getResult(url));
        }
    });
    TCreate[i].setName("URL"+i);
    TCreate[i].start();
}

for (int j = 0; j < TCreate.length; j++)
    while (TCreate[j].isAlive())
         Thread.sleep(10);
Run Code Online (Sandbox Code Playgroud)

至于你的obj变量,我不知道它是什么,你可以尝试声明它final.但请注意,final引用不能更改,但在您的情况下,它可能只是工作.

`final Object obj = ....;`
Run Code Online (Sandbox Code Playgroud)