Logo

郎哥编程

线程的加入

2019-12-31 220

线程的加入是指在当前线程中执行另外一个线程。例如A线程在执行过程中需要先执行B线程,等待B线程执行完毕后,A线程再继续执行。在这种情况下,就可以使用Thread类的join()方法来完成。

下面是Thread类线程加入相关的常用方法,分别说明如下:

●   void  join()

该方法用于将当前线程加入到另外一个线程,另外一个线程会等待该线程执行完毕再继续执行。

●   void  join(long millis)

该方法用于将当前线程加入到另外一个线程,另外一个线程会等待该线程执行millis毫秒后再执行,如果当前线程millis毫秒后没有结束,两个线程会并发执行。

案例1:建立ThreadA类和ThreadB类,在ThreadA类加入ThreadB类线程。

在thread包下新建ThreadA类。代码如下:

package thread;
 
/** 
* @ClassName: ThreadA 
* @Description: 多线程操作(线程的加入)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class ThreadA extends Thread {
 
    Thread  threadB = null;
    /**
    * <p>Title: run</p> 
    * <p>Description: </p>   
    * @see java.lang.Thread#run() 
    */ 
   
    @Override
    public void run() {
       // TODO Auto-generated method stub
       super.run();
       // 在线程中执行的代码
       for( int i = 0; i<100; i++ ) {
           if( i == 10)
           {
              // 调用threadB的join方法,执行threadB线程
              if( threadB != null )
              {
                  try {
threadB.start();
                     threadB.join();
                  } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                     e.printStackTrace();
                  }
              }
           }
           System.out.println("ThreadA:" + i);
       }
    }
    /**
     * @return the threadB
     */
    public Thread getThreadB() {
       return threadB;
    }
    /**
     * @param threadB the threadB to set
     */
    public void setThreadB(Thread threadB) {
       this.threadB = threadB;
    }
 
}

ThreadA类内部定义了Thread类型的变量,用于存储ThreadB的实例对象引用。在ThreadA类的run()方法调用启动ThreadB线程,并调用ThreadB的join()方法,等待ThreadB线程执行完毕。

在thread包下新建ThreadB类。代码如下:

package thread;
 
/** 
* @ClassName: ThreadB 
* @Description: 多线程操作(线程的加入)案例1 
* @author 编程训练营 
* @date  
* 
*/
 
public class ThreadB extends Thread {
 
    /**
    * <p>Title: run</p> 
    * <p>Description: </p>   
    * @see java.lang.Thread#run() 
    */ 
   
    @Override
    public void run() {
       // TODO Auto-generated method stub
       super.run();
       try {
           System.out.println("线程B启动");
           Thread.sleep(500);
           System.out.println("线程B结束");
       } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    }
 
}

ThreadB线程休眠500毫秒后结束。

在thread包下新建ThreadJoinTest类。代码如下:

package thread;
 
/** 
* @ClassName: ThreadJoinTest 
* @Description:  多线程操作(线程的加入)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class ThreadJoinTest {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法  
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // TODO Auto-generated method stub
       ThreadA  threadA = new ThreadA();
       ThreadB  threadB = new ThreadB();
       threadA.setThreadB(threadB);
       threadA.start();
       //threadB.start();
 
    }
 
}

ThreadJoinTest程序分别实例化ThreadA和ThreadB对象,调用ThreadA的setThreadB()方法设置ThreadA的threadB变量,并启动ThreadA线程。

程序执行结果如下图所示:

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论