2008-7-18 13:06
lazycat001
帮忙看看这个多线程的代码
本想用FutureTask封装一个 Runnable
线程。然后几个FutureTask对象同时运行,没想到FutureTask
并不是多线程运行的。
我只是想用它在线程运行结束得到其运行的结果。
有别的方法吗?
下面的代码有点乱,但改一下就可以知道FutureTask并不是多线程运行的。
/*Thread t1=new Thread(o[0]);
Thread t2=new Thread(o[1]);//这个代码很显然是多线程的。
t1.start();
t2.start();
*/
import java.util.concurrent.FutureTask;
class Out implements Runnable
{
public static int var=0;
private int id;
public int i;
public StringBuilder sb=new StringBuilder();
Out()
{
this.id=var;
var++;
}
public void speak()
{
for(i=0;i <=1000;i++)
System.out.println("My id is:"+id);
sb.append(i);
}
public void run()
{
this.speak();
}
}
class Fun
{
private FutureTask <StringBuilder>[] ft=new FutureTask[2];
private Out[] o=new Out[2];
public void fun()
{
for(int i=0;i <2;i++)
{
o[i]=new Out();
System.out.println("ok!");
}
/*for(int i=0;i <2;i++)
{
ft[i].run();
}*/
//Thread t1=new Thread(o[0]);
//Thread t2=new Thread(o[1]);
//t1.start();
//t2.start();
ft[0]=new FutureTask <StringBuilder>(o[0],o[0].sb);
ft[1]=new FutureTask <StringBuilder>(o[1],o[1].sb);
ft[0].run();
ft[1].run();
for(int i=0;i <=100;i++)
System.out.println("main:"+i);
try
{
System.out.println("out0:"+ft[0].get().toString());
System.out.println("out1:"+ft[1].get().toString());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public class MulTread
{
public static void main(String[] args)
throws Exception
{
Fun f=new Fun();
f.fun();
}
}