求 Java 多线程 Runnable接口 返回值的问题

时间:2023-02-08 17:32:34
    大家好,我现在使用多线程的方法,开启若干个线程如5个线程 处理同类型的多个任务,他们处理结束的时间是不同的,但都可以得到一个List类型的处理结果,我现在需要将各个子线程的处理结果在其处理完后返回到主线程(分别或者一起返回均可),用一个更大的List类型变量,将这些子线程的数据统一保存起来,请问这该怎么做谢谢!

8 个解决方案

#1


Callable可以做你的需求。

#3


补充一下问题,我的项目目前版本只能用Java1.4做,Callable是1.5的函数,目前不支持,希望在使用Runnable接口实现时,也能找到好的方法实现子线程向主线程传递数据!

#4


看你之前的帖子,刚回复了,http://topic.csdn.net/u/20100608/14/e4772b37-757f-41b8-8aa8-f7e1c2e2aa17.html?seed=1441256914&r=66088162#r_66088162
用个  static ConcurrentHashMap<String, list[]>

#5


synchronize(biglist)
{
      biglist.add(smalllist);
}

#6


引用 3 楼 undertones1985 的回复:
补充一下问题,我的项目目前版本只能用Java1.4做,Callable是1.5的函数,目前不支持,希望在使用Runnable接口实现时,也能找到好的方法实现子线程向主线程传递数据!


见过你之前的帖子,让他们一起操作一个共享数据结构吧,也许可以的。

#7


楼主看看下面的例子,join可以实现你的需求
package cn.tyb.thread;

public class ThreadJoin extends Thread{
private String type;
private Object o;
public ThreadJoin(String type){
this.type=type;
}

public void run(){
//测试代码
int i=0;
while(true){
if(i>=10){
break;
}
System.out.println(type+": "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
//要放回的值
o=i;
}

public Object get(){
try {
//若该线程已经执行完了,则返回o
this.join();
return o;
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}

public static void main(String[] args) throws InterruptedException{
ThreadJoin tj1 = new ThreadJoin("A");
ThreadJoin tj2 = new ThreadJoin("B");
//这里可以开n个线程
tj1.start();
tj2.start();

//线程开完之后再调用获取返回值的方法
System.out.println(tj1.get());
System.out.println(tj2.get());
}
}

#8


谢谢,我已经搞定

#1


Callable可以做你的需求。

#2


#3


补充一下问题,我的项目目前版本只能用Java1.4做,Callable是1.5的函数,目前不支持,希望在使用Runnable接口实现时,也能找到好的方法实现子线程向主线程传递数据!

#4


看你之前的帖子,刚回复了,http://topic.csdn.net/u/20100608/14/e4772b37-757f-41b8-8aa8-f7e1c2e2aa17.html?seed=1441256914&r=66088162#r_66088162
用个  static ConcurrentHashMap<String, list[]>

#5


synchronize(biglist)
{
      biglist.add(smalllist);
}

#6


引用 3 楼 undertones1985 的回复:
补充一下问题,我的项目目前版本只能用Java1.4做,Callable是1.5的函数,目前不支持,希望在使用Runnable接口实现时,也能找到好的方法实现子线程向主线程传递数据!


见过你之前的帖子,让他们一起操作一个共享数据结构吧,也许可以的。

#7


楼主看看下面的例子,join可以实现你的需求
package cn.tyb.thread;

public class ThreadJoin extends Thread{
private String type;
private Object o;
public ThreadJoin(String type){
this.type=type;
}

public void run(){
//测试代码
int i=0;
while(true){
if(i>=10){
break;
}
System.out.println(type+": "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
//要放回的值
o=i;
}

public Object get(){
try {
//若该线程已经执行完了,则返回o
this.join();
return o;
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}

public static void main(String[] args) throws InterruptedException{
ThreadJoin tj1 = new ThreadJoin("A");
ThreadJoin tj2 = new ThreadJoin("B");
//这里可以开n个线程
tj1.start();
tj2.start();

//线程开完之后再调用获取返回值的方法
System.out.println(tj1.get());
System.out.println(tj2.get());
}
}

#8


谢谢,我已经搞定