package thread;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
/*
* 线程的加入
* 当某个线程使用join()方法加入到另一个线程,另一个线程会等待该线程执行完步后再继续执行
*/
public class ThreadJoinTest extends JFrame{
//定义两个线程
private Thread threadA;
private Thread threadB;
//定义两个进度条组件
final JProgressBar pb=new JProgressBar();
final JProgressBar pb2=new JProgressBar();
int count=0;
public ThreadJoinTest() {
super();
//将进度条设置在窗体最北面
getContentPane().add(pb,BorderLayout.NORTH);
getContentPane().add(pb2,BorderLayout.SOUTH);
//设置进度条显示数字字符
pb.setStringPainted(true);
pb2.setStringPainted(true);
//使用匿名内部类形式初始化Thread实例
threadA=new Thread(new Runnable() {
int count=0;
@Override
public void run() {
while(true) {
//设置进度条的当前值
pb.setValue(++count);
try {
//使线程A休眠100毫秒
threadA.sleep(100);
//使线程B调用join()
threadB.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
threadA.start();
threadB =new Thread(new Runnable() {
int count=0;
@Override
public void run() {
while(true) {
pb2.setValue(++count);
try {
//使线程B休眠100毫秒
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//当count变量增长为100时
if(count==100) {
break;//跳出循环
}
}
}
});
threadB.start();
}
public static void init(JFrame frame,int width,int height) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width,height);
frame.setVisible(true);
}
public static void main(String[] args) {
init(new ThreadJoinTest(),100,100);
}
/*
* 本实例创建了两个线程,这两个线程分别负责进度条的滚动。在线程A的run()方法中使线程B的对象调用
* join(),而join()使当前运行线程暂停,直到调用join()的线程执行完毕后再执行,所以线程A等待线程B
* 执行完毕后再开始执行,也就是下面的进度条滚动完毕后上面的进度条才开始滚动
*/
}
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
/*
* 线程的加入
* 当某个线程使用join()方法加入到另一个线程,另一个线程会等待该线程执行完步后再继续执行
*/
public class ThreadJoinTest extends JFrame{
//定义两个线程
private Thread threadA;
private Thread threadB;
//定义两个进度条组件
final JProgressBar pb=new JProgressBar();
final JProgressBar pb2=new JProgressBar();
int count=0;
public ThreadJoinTest() {
super();
//将进度条设置在窗体最北面
getContentPane().add(pb,BorderLayout.NORTH);
getContentPane().add(pb2,BorderLayout.SOUTH);
//设置进度条显示数字字符
pb.setStringPainted(true);
pb2.setStringPainted(true);
//使用匿名内部类形式初始化Thread实例
threadA=new Thread(new Runnable() {
int count=0;
@Override
public void run() {
while(true) {
//设置进度条的当前值
pb.setValue(++count);
try {
//使线程A休眠100毫秒
threadA.sleep(100);
//使线程B调用join()
threadB.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
threadA.start();
threadB =new Thread(new Runnable() {
int count=0;
@Override
public void run() {
while(true) {
pb2.setValue(++count);
try {
//使线程B休眠100毫秒
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//当count变量增长为100时
if(count==100) {
break;//跳出循环
}
}
}
});
threadB.start();
}
public static void init(JFrame frame,int width,int height) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width,height);
frame.setVisible(true);
}
public static void main(String[] args) {
init(new ThreadJoinTest(),100,100);
}
/*
* 本实例创建了两个线程,这两个线程分别负责进度条的滚动。在线程A的run()方法中使线程B的对象调用
* join(),而join()使当前运行线程暂停,直到调用join()的线程执行完毕后再执行,所以线程A等待线程B
* 执行完毕后再开始执行,也就是下面的进度条滚动完毕后上面的进度条才开始滚动
*/
}