zoukankan      html  css  js  c++  java
  • 2020年9月15日 线程通信问题(面试题)

    1、为了解决“生产者与消费者问题”。

    当一些线程负责往“数据缓冲区”放数据,另一个线程负责从“数据缓冲区”取数据。

    问题1:生产者线程与消费者线程使用同一个数据缓冲区,就是共享数据,那么要考虑同步

    问题2:当数据缓冲区满的时候,生产者线程需要wait(), 当消费者消费了数据后,需要notify或notifyAll

    当数据缓冲区空的时候,消费者线程需要wait(), 当生产者生产了数据后,需要notify或notifyAll

    2、java.lang.Object类中声明了:

    (1)wait():必须由“同步锁”对象调用

    (2)notfiy()和notifyAll():必须由“同步锁”对象调用

     

    3、面试题:sleep()和wait的区别

    (1)sleep()不释放锁,wait()释放锁

    (2)sleep()在Thread类中声明的,wait()在Object类中声明

    (3)sleep()是静态方法,是Thread.sleep()

    wait()是非静态方法,必须由“同步锁”对象调用

    (4)sleep()方法导致当前线程进入阻塞状态后,当时间到或interrupt()醒来

    wait()方法导致当前线程进入阻塞状态后,由notify或notifyAll()

     

    4、哪些操作会释放锁?

    (1)同步代码块或同步方法正常执行完一次自动释放锁

    (2)同步代码块或同步方法遇到return等提前结束

    (3)wait()

     

    5、不释放锁

    (1)sleep()

    (2)yield()

    (3)suspend()

  • 相关阅读:
    2018级软件秋季总结
    对我影响最大的三位老师
    自我介绍
    Js中的一个日期处理格式化函数
    SQL update语句加减乘除运算
    用css让一个容器水平垂直
    position:absolute 的深入探讨
    java正则表达式
    Session
    使用Cookie进行会话管理
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13674571.html
Copyright © 2011-2022 走看看