多线程笔记——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 读写锁

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

 

posted on 2018-09-24 16:51  计科wang  阅读(133)  评论(0编辑  收藏  举报