线程A中加入线程B,B中加入C,运行结果不对

豆腐花发 2016-06-27 11:57:35
线程A中加入线程B,B中加入C,理论上应该:先执行C,后执行B,再执行A;

运行结果是:B执行完后,执行C,然后A不执行了,这是咋回事?

三个进程都是现实进度条从0到100,

完整代码如下:
import java.awt.*;

import javax.swing.*;

public class Practice extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private Thread threadA; // 定义两个线程
private Thread threadB;
private Thread threadC;

final JProgressBar progressBar = new JProgressBar(); // 定义两个进度条组件

final JProgressBar progressBar2 = new JProgressBar();
final JProgressBar progressBar3 = new JProgressBar();
int count = 0;

//JProgressBar jpbar = new JProgressBar();
//JProgressBar jpbar2 = new JProgressBar();



public static void main(String[] args) {
init(new Practice(), 100, 100);
}

public Practice() {
super();
// 将进度条设置在窗体最北面
//getContentPane().add(progressBar, BorderLayout.NORTH);
//progressBar.setStringPainted(true);
getContentPane().add(progressBar, BorderLayout.NORTH);

getContentPane().add(progressBar3, BorderLayout.CENTER);

// 将进度条设置在窗体最南面
getContentPane().add(progressBar2, BorderLayout.SOUTH);
progressBar.setStringPainted(true); // 设置进度条显示数字字符
progressBar2.setStringPainted(true);
progressBar3.setStringPainted(true);
// 使用匿名内部类形式初始化Thread实例子
threadA = new Thread(new Runnable() {
int count = 0;

public void run() { // 重写run()方法
while (true) {

progressBar.setValue(++count); // 设置进度条的当前值
//System.out.println()
//progressBar.setValue(++count);
try {
Thread.sleep(100); // 使线程A休眠100毫秒
threadB.join(); // 使线程B调用join()方法


} catch (Exception e) {
e.printStackTrace();
}

}
}
});
threadA.start(); // 启动线程A

threadB = new Thread(new Runnable() {
int count = 0;

public void run() {
while (true) {
progressBar2.setValue(count);// 设置进度条的当前值
count = count + 10;
try {
Thread.sleep(100); // 使线程B休眠100毫秒
threadC.join();
} catch (Exception e) {
e.printStackTrace();

}

}
}
});
threadB.start(); // 启动线程B


threadC = new Thread(new Runnable() {
int count = 0;

public void run() {
while (true) {
progressBar3.setValue(count);// 设置进度条的当前值
count = count + 10;
try {
Thread.sleep(100); // 使线程B休眠100毫秒
} catch (Exception e) {
e.printStackTrace();

}

if(count == 110){
break;
}

}
}
});
threadC.start(); // 启动线程B
}

// 设置窗体各种属性方法
public static void init(JFrame frame, int width, int height) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
}
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java4c 2016-07-17
  • 打赏
  • 举报
回复
我唯一能做的,就只有把这个帖子顶上去这件事了。
豆腐花发 2016-06-28
  • 打赏
  • 举报
回复
有人看下吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧