JAVA 线程的加入 thread.join()

本文深入探讨Java中线程的join方法,演示了如何通过join方法实现线程间的同步,包括等待特定线程完成和设定最大等待时间的场景,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法:
线程对象.join() //等待该线程终止,原线程才可以继续进行
线程对象.join(long millis)//最久的等待的时间
例子
两个进度条同时进行 加载到100
(1)在A进程执行到20的时候加入B进程,将会执行完B进程后,在执行A进程

	if(count==20)
	{
	   threadB.join();//将线程B加入到线程A当中
	}

(2)在A执行到20的时候加入B,执行两秒B,然后在一同执行A、B两个进程。

	if(count==20)
	{
    	threadB.join(2000);
	 }

具体代码如下

package MT;

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class JoinTest   extends  JFrame {

	   private static  final long serivalVersionUID=1L;
        private Thread threadA;//定义两个线程
        private Thread threadB;
        final JProgressBar progressBar =new JProgressBar();//定义两个进度条
        final JProgressBar progressBar2 =new JProgressBar();//定义两个进度条
        int count=0;
	  public static void main(String[] args) {
		// TODO Auto-generated method stub
		init(new JoinTest(),200,100);
	   }
	public  JoinTest()
	{
		super();
		//将进度条设置在窗体的最北面
		getContentPane().add(progressBar,BorderLayout.NORTH);
		//将进度条设置在窗体的最南面
	    getContentPane().add(progressBar2,BorderLayout.SOUTH);
	    progressBar.setStringPainted(true);//设置进度条显示数字字符
	    progressBar2.setStringPainted(true);//设置进度条显示数字字符
	    
	    //使用匿名内部类形式初始化Thread例子
	    
	    threadA =new Thread(new  Runnable() {
	    int count=0;
	    public void run() {//重写run()方法
	    	while(true) {
	       progressBar.setValue(++count);//设置进度条当前值
	       try {
				Thread.sleep(100);//休眠1毫秒
				/******线程的加入   *****/
				if(count==20)
				{
					//threadB.join();//将线程B加入到线程A当中
					threadB.join(2000);//停顿两秒钟
				}
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
	    	}
	      	}
	      	 		
         }
	    	
      });
	   threadA.start(); //启动线程A*/
	   threadB =new Thread(new  Runnable() {
	    int count=0;
	    public void run() {//重写run()方法
	    	while(true) {
	
	       progressBar2.setValue(++count);//设置进度条当前值
	       try {
				Thread.sleep(100);//休眠1毫秒
				/**** 线程的加入*******/
				
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
	    	}
	         if(count==100)
	        {//当count 变量增长为100
	        	 break;//跳出循环
	      	}
	      	 		
        }
	    }
	    	
	    	
     });
	   threadB.start(); //启动线程B
	    
   
	}
	    
	 //设置窗体的各种属性
	private static void init(JFrame frame,int width,int height) {
		// TODO Auto-generated method stub
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(width, height);
		frame.setVisible(true);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值