线程的加入是指在当前线程中执行另外一个线程。例如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线程。
程序执行结果如下图所示:
