• 多线程笔记——3


    线程间的通信

    1等待唤醒机制

    wait  notify是object类的方法,该方法用来将当前线程置入“预执行队列”,并在wait处停止执行直到被唤醒才继续执行

    执行wait()方法,线程必须获得该对象的对象级别的锁,否则会抛出IllegalMonitorStateException.

    wait 方法释放锁   sleep 方法不释放锁  notify  被执行后不释放锁,必须执行完notify所在的同步代码块才释放锁

    2 生产者消费者 的 假死问题

    出现假死问题的原因就是有可能连续唤醒同类

    解决办法 及时使用  waitAll  和  notifyAll

    3 通过管道通信

    字符流 PipReader  PipWrite  

    字节流 PipInputStream  PipOutPutStream

    4 join方法

    join(long) 与sleep(long)  join内部使用的是wait(long)方法,所以具有释放锁的特点

    5 ThreadLocal 的使用

    Lock的使用

    ReentrantLock类

    lock.lock() 与locl=k.unlock()

    Condation与lock结合可以实现选择性通知  condation.await() 与 condition.signal()

    公平锁与非公平锁

    公平锁表示线程获取锁的顺序是按照加锁的顺序来分配的 ,非公平锁就是一种获取锁的抢占机制,是随机获取的。

    公平锁 ReentrantLock  lock = new ReentrantLock (true);

    非公平锁ReentrantLock  lock = new ReentrantLock (false);

    RerntrantReadWriteLock 读写锁

    读读共享  写写互斥  读写互斥

  • 相关阅读:
    参考博客
    拆包
    python2和python3关于列表推导的差别
    salt Rosters
    list.sort和内置方法sorted的区别
    关于在元祖中+=
    runners
    DataGridView合并单元格
    Android之TelephonyManager类的方法详解
    Android应用自动更新功能的代码实现
  • 原文地址:https://www.cnblogs.com/wanglingdeboke/p/9695913.html
Copyright © 2020-2023  润新知