Java 线程连接

概要:

线程连接(join)是线程间运行调度的一种操作,即线程需要等待其他线程运行结束后才能够开始,否则继续等待。本实例介绍在多个线程之间等待。当线程的前一个或几个线程执行结束后,该线程才继续执行。

| |目录

技术要点

    运用线程连接的技术要点如下:

  • 线程连接有两种形式:join(参数)和join(),在join(参数)方法中参数表示等待的时间,单位是毫秒。若超出这个时间,则无论前线程是否执行完毕,该线程都会继续运行。如果时间为0,则表示无期限地等待。join()方法相当于join(0),表示无期限地等待。

  • join操作与sleep操作一样都可以被interrupt操作唤醒。

代码实现

package net.xsoftlab.baike;
class Marry extends Thread {// 测试是否能结婚的类
	private String personName; // 人员名称
	private String personObj;// 结婚对象
	private boolean isMarry = false;// 是否结婚
	public Marry(String personName, String personObj) {// 带参数构造方法进行初始化
		this.personName = personName;
		this.personObj = personObj;
	}
	public void run() {
		int i = 0;
		try {
			while (i < 5) {
				int person = (int) Math.floor((Math.random() * 10 + 1));// 获得随机数
				if (person % 2 == 0) {
					isMarry = true;// 设置标识
				} else {
					isMarry = false;
				}
				if (!isMarry) {
					System.out.println(personName + "可以与" + personObj + person
							+ "结婚");
				} else {
					System.out.println(personObj + person + "已经结婚,要有始有终");
				}
				Thread.sleep(200);// 线程休眠
				i++;
			}
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		}
	}
}
public class TextThreadJoin {// 操作线程连接(结合)的类
	public static void main(String[] args) {// java程序主入口处
		Thread m1 = new Marry("TOM", "SUSAN");// 实例化对象
		Thread m2 = new Marry("JIM", "LINGDA");
		Thread m3 = new Marry("SUN", "LILI");
		System.out.println("测试是否能结婚,要保证有始有终");
		m1.start();// 启动线程
		try {
			m1.join();// 等待线程运行结束
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		}
		m2.start();
		try {
			m2.join();// 等待线程运行结束
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		}
		m3.start();
		try {
			m3.join();// 等待线程运行结束
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		}
		System.out.println("匹配结束...");
	}
}

程序解读

  1. Marry类构造方法带参数初始化人员名称与要匹配的对象。其run()方法根据条件循环5次,获得随机整数并判断此整数是否是偶数,如果是则将标识变量设置为真表示已经结婚,否则为假表示未婚。

  2. 在main()主方法中创建三个Marry线程类对象,并依次启动这三个线程类对象,在每个线程类对象启动后调用join()方法,用来等待该线程类运行结束。当运行结束后下一个线程对象才启动运行。

评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消