操作线程的方法——线程的加入——进度条滚动

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
     * 执行完毕后再开始执行,也就是下面的进度条滚动完毕后上面的进度条才开始滚动
     */

}

猜你喜欢

转载自blog.csdn.net/qq_41978199/article/details/80632859