并发编程-线程间的协作(二)

二、yield()方法

当前线程调用yield方法,通知虚拟机当前线程让出cpu 占有权,但是什么时候让出是不可设定的,也不会释放锁资源。所以使用yield方法最好是释放锁后在调用。

注:执行yield方法的线程有可能在进入到就绪状态后在被操作系统选中马上执行。

由于不好演示这边不做代码演示。

三、join()方法

join() 方法可以将两个交替执行的线程合并为顺序执行,概念比较抽象直接上代码。

/**
 * join() 方法演示类
 * @author ckj
 *
 */
public class JoinThread {

	static class Tom implements Runnable {
		
		private Thread jerryThread;
		
		public Tom(Thread jerryThread) {
			this.jerryThread = jerryThread;
		}

		public void run() {
			System.out.println("Tom 正在吃饭");
			try {
				if(jerryThread !=null) {
					jerryThread.join();
				}
			
			Thread.sleep(2000);
			} catch (Exception e) {
				// TODO: handle exception
			}
			System.out.println("Tom 吃完饭了");

		}
	}

	static class Jerry implements Runnable {
		public void run() {
			
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("Jerry 正在吃饭");
			
			System.out.println("Jerry 吃完饭了");
		}

	}

	public static void main(String[] args) {
		
		Thread JerryThread = new Thread(new Jerry());
		Thread tomThread = new Thread(new Tom(JerryThread));
		tomThread.start();
		JerryThread.start();

	}

如果注释掉join 方法的话执行结果应该是

Tom 正在吃饭
Tom 吃完饭了
Jerry 正在吃饭
Jerry 吃完饭了
增加了join 方法后执行结果是

Tom 正在吃饭
Jerry 正在吃饭
Jerry 吃完饭了
Tom 吃完饭了

可见在线程 Tom中调用了线程 Jerry 的 Join()方法,直到线程 Jerry  执行完毕后,才会继续 执行线程 Tom

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值