java 子线程如何返回结果给主线程

我在主线程里的run()调用的函数里有开了一个线程,但现在我需要等子线程运行到一定程度(比如i=0,i++到100),子线程结束的同时,主线程也要结束。期间,主线程也在运... 我在主线程里的run()调用的函数里有开了一个线程,但现在我需要等子线程运行到一定程度(比如i=0,i++到100),子线程结束的同时,主线程也要结束。期间,主线程也在运行另外一个程序,不能单纯让主线程等待子线程结束。。
刚接触JAVA不久,这种情况我该怎么处理,创建线程是用 implements Runnable()这种.
展开
 我来答
slzcharge
推荐于2017-11-24 · 超过11用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:31.5万
展开全部
可以的 你的主线程和子线程 synchronized 一个boolean变量(flag)
当子线程到达一定条件是将其设置成false;
而主线程run()做这样的设置 while(flag){}
这样主线程就会结束了~~
其实有直接关闭线程的方法 但是不建议这么做~~
防止出现死锁.
更多追问追答
追问
我原先也是这么做的 不过不知道为什么 主线程停不下来
大体结构是这样的:
public boolean flag =true;
class mainThread ....{
run(){while(flag){调用函数A; } }
A函数{
while(..){
if(循环第一次的时候){new subThread;}}
}
class subThread{
run(){
while(...){... if(num==100){ flag=false;} }}}
追答
public class MyThreadTest {

public static void main(String[] args) {

MainThread mainThread=new MainThread();
mainThread.start();

}
}

class MainThread extends Thread {
protected static boolean flag = true;
public void run() {
super.run();
SubThread subThread=new SubThread();
subThread.start();
while (flag) {
System.out.println("主线程run!");
}
}
}
class SubThread extends MainThread {
private int i=0;
private boolean subFlag=true;
public void run(){
while(subFlag){
System.out.println("子线程run! "+i);
i+=1;
if(i==100){
flag=false;
subFlag=false;
}
}
}
}
贴下我的代码吧 这个基本符合你的想法 (运行也正常)
你看看 你哪里不明白....咱们再一起解决问题
(CSDN的账号 被洗 考 密码居然明文保存...)
楼上的写法也可以...
其实观察者设计模式最好...
winters1224
2011-12-23 · TA获得超过398个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:39万
展开全部
试试用观察者,把主线程注册为子线程的观察者,子线程结束时,去关闭其观察者线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2011-12-23 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1629万
展开全部
你看一下,这个能不能满足你的要求。

public class TS {

public static void main(String[] args) {
RunA classA = new RunA();
new Thread(classA).start();
}
}

class RunA implements Runnable {
public void run() {
RunB classb = new RunB();
new Thread(classb).start();
while (true) {
if (classb.index == 100) {
System.out.println("over");
break;
}
try {
Thread.sleep(20);
} catch (Exception e) {

}
}
}
}

class RunB implements Runnable {
public int index = 0;

public void run() {
while (true) {
if (index == 100) {
break;
}
index++;
try {
Thread.sleep(20);
} catch (Exception e) {

}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式