java 子线程如何返回结果给主线程
我在主线程里的run()调用的函数里有开了一个线程,但现在我需要等子线程运行到一定程度(比如i=0,i++到100),子线程结束的同时,主线程也要结束。期间,主线程也在运...
我在主线程里的run()调用的函数里有开了一个线程,但现在我需要等子线程运行到一定程度(比如i=0,i++到100),子线程结束的同时,主线程也要结束。期间,主线程也在运行另外一个程序,不能单纯让主线程等待子线程结束。。
刚接触JAVA不久,这种情况我该怎么处理,创建线程是用 implements Runnable()这种. 展开
刚接触JAVA不久,这种情况我该怎么处理,创建线程是用 implements Runnable()这种. 展开
3个回答
展开全部
可以的 你的主线程和子线程 synchronized 一个boolean变量(flag)
当子线程到达一定条件是将其设置成false;
而主线程run()做这样的设置 while(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的账号 被洗 考 密码居然明文保存...)
楼上的写法也可以...
其实观察者设计模式最好...
展开全部
试试用观察者,把主线程注册为子线程的观察者,子线程结束时,去关闭其观察者线程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看一下,这个能不能满足你的要求。
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) {
}
}
}
}
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) {
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询