多线程学习:wait和sleep区别

1.wait可以指定时间也可以不指定,sleep必须指定时间。

2.在同步是,对cpu的执行权和锁的处理不同(知识点:执行权,有执行权,那么意味了一直占用cpu在执行,其它线程分配不到cpu)

wait:释放执行权,释放锁(很好理解,不指定时间,那么他必须要等别人唤醒,如果不释放锁和执行权,那么其他线程压根没法执行)。

sleep:释放执行权,不释放锁(到了时间自己醒来继续执行)

/**
 * 创建日期:2019-6-4下午12:07:57
 * 修改日期:
 * 作者:laishi
 * 版本: 1.0.0
 * 功能说明:
 */
package com.lsx.面试题;

/**
 * 创建日期:2019-6-4下午12:07:57 修改日期: 作者:laishixiong 版本: 1.0.0 功能说明:
 */
public class 问题2 {
	public void show() {//t1 t2 t3
		synchronized (this) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void method() {//t4
		synchronized (this) {
			notifyAll();
		}
	}
}
//1.  问题说明:假设t1,t2,t3同时执行代码show(),这个时候假设t1第一个拿到锁
//2.  t1遇到wait就会释放执行权和锁,这个时候t2,t3的流程是一样的,全部执行了一遍wait,然后全部处于等待状态。这个时候出现了现象就是三个线程都进入了同步代码块。
//理论定义了只能一个线程执行同步代码块。一把锁同一时刻只能被一个对象拥有。
//3.  t4执行method()方法调用notifyAll(),这个时候t1,t2,t3将被同事唤醒,这个时候就会出现这个问题,三个线程全部被唤醒,wait之后的代码怎么执行
//4.  按照谁第一个wait的线程,进行锁的分配,所以t1会先获得锁,然后执行代码,执行完了之后再把锁给下一个线程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值