ITPUB论坛 » Java入门与认证版 » 帮忙看看这个多线程的代码
新一届的微软MVP评选已经开始,欢迎各位推荐!
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();


}

}

2008-7-18 13:07 cayman811
代码没看,按你的意思,可能要用到join

2008-7-18 13:07 lazycat001
是啊,我以前是用的join()。在网上有人说用FutureTask可以完成相同的效果,我也试过了。

今天才发现FutureTask并不是多线程的。

页: [1]


Powered by ITPUB论坛