我需要知道 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/