多线程中sleep()和wait()

多线程中sleep()和wait()

Java中的sleep()和wait()方法都可以造成程序等待的状态,这两者的区别是:

​ 1、原理不同。sleep是Thread的静态方法,而wait是object类的成员方法。

​ 2、对锁的处理机制不一样。由于sleep方法主要是让线程休息一段时间,不涉及线程间的通信,因此调用这个方法不会释放锁。而wait方法会释放线程占用的锁。

​ 3、使用区域不同。wait方法必须放在同步控制方法或者同步语句块中使用。而sleep则可在任何地方使用。

调用wait()方法后,当前线程会存入调用该方法的对象的等待池中,直到被唤醒。notify方法是唤醒等待池中的随机一个线程,notifyAll方法唤醒所有,但它们仍要等待CPU调度。


多线程打印AB1CD2…YZ13

public class ThreadPrint {
	static Object obj = new Object();
	
    public static void main(String[] args) {
		new Thread(() -> {
			for (int i = 0; i < 26;) {
				synchronized (obj) {
					System.out.print((char) (i + 65) + "" + (char) (i + 66));
					i += 2;
					try {
                        //先唤醒其他线程,自己再等待
						obj.notify();
						obj.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();
        
		new Thread(() -> {
			for (int i = 1; i <= 13; i++) {
				synchronized (obj) {
					System.out.print(i);
					try {
                         //先唤醒其他线程,自己再等待
						obj.notify();
						//如果是最后一次,不等待直接出循环
                        if(i!=13) {
							obj.wait();
						}
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值