线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)

线程并发学习

线程并发学习—-核心概念(转载)
线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)
线程并发学习—-线程阻塞(synchronized)
线程并发学习—-线程阻塞(lock)
线程并发学习—-Thread、Runnable、Callable
线程并发学习—-队列(Queue)
spring学习—-线程池
java中一些锁概念整理(转载)

比较

  • 两者来自不同的类(分别是Thread和Object)
  • sleep方法没有释放锁;而wait方法释放了锁,使得其他线程可以使用同步控制块或方法
  • wiat只能在同步控制方法或者同步控制块使用,而sleep可以在任何地方使用
  • sleep必须捕获异常,而wait不需要
  • notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级
  • notifyAll()则能唤醒全部等待线程
  • join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B

示例

public class WaitDemo {

    public static void main(String[] args) {
        WaitDemo waitDemo = new WaitDemo();
        new Thread(new Runnable() {
            @Override
            public void run() {
                waitDemo.getA();
            }
        }).start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(new Runnable() {
            @Override
            public void run() {
                waitDemo.getB();
            }
        }).start();
    }


    public synchronized void getA() {
        System.out.println("get A.....");
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end A");
    }

    public synchronized void getB() {

        System.out.println("get B.....");
        try {
            Thread.sleep(3000);
            notify();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end B");

    }
}

结果

get A.....
get B.....
end B
end A

从结果可以看出线程a先获取到 锁,getA方法调用wait方法释放锁,getB使用sleep休眠3秒,但并不释放锁,然后使用notify唤醒等待线程

参考资料
https://www.cnblogs.com/royi123/archive/2013/06/01/3113198.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值