本想用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();
}
}
//谁能给个解释?
线程。然后几个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();
}
}
//谁能给个解释?
解决方案 »
- 关于java中keytool的用法?
- 参数为null,应该抛出什么异常?
- 大家好,听说用JB还是比较好,所以,大家能给我推荐下:JB的使用入门教材吗?谢谢
- 关不掉的线成?
- 还是我还是java打印问题 文本图片打印如何分页(对不起!我只有10分了)
- 有关数据流的操作,比较,给些建议,谢谢!
- java连接mysql,为什么出现java.sql.SQLException: No suitable driver?
- 新手做的,有点小功能,大家可以看下,源码分享
- 最后的分数,全部散光,新年新起点嘛!
- 为什么代码没错 背景没有变?
- 谁给我一个多线程聊天室的简单程序
- 关于Socket Client接受Object
如果只想得到运行结果。那你为什么不直接用callable呢?!!