c# - java中的线程数组

标签 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);

我需要知道如何在 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;

            }               

        }

如果您需要任何详细信息,请告诉我。

如果我转换这个

    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);

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

提前致谢

最佳答案

非常相似。 Java 没有委托(delegate),而是有 Runnable 接口(interface),而不是 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);

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

`final Object obj = ....;`

关于c# - java中的线程数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490686/

相关文章:

c# - 无法让 ASP.NET MVC 6 Controller 返回 JSON

java - 有没有办法获取sparkjava/嵌入式jetty服务器的主线程执行器?

java - 当我只创建了两个线程时,为什么 `ps` 会列出 > 2 个 Java 线程/"light-weight processes"?

java - 为什么等待线程会延迟 Swing 组件的更新?

java - 视频驱动程序不支持 OpenGL

c# - 从异常中获取实际的 StackTrace 对象

javascript - c# WPF Webbrowser with Highchart,来自外部源的 Javascript 不工作 "An error has occurred in the script on this page"

c# - SqlCommand 读取一个值

java - Jackson 库 1.x 数组如果一个元素有时只是一个字符串

java - LDAP Java 打印调试输出