死锁:
• 当第一个线程拥有A A 对象锁标记,并等待B B 对象锁标记,同时第二个线程拥有B对象锁标记,并等待A 对象锁标记时,产生死锁。
• 一个线程可以同时拥有多个对象的锁标记,当线程阻塞时,不会释放已经拥有的锁标记,由此可能造成死锁.
生产值,消费者:
若干个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在
两者之间设置一个能存储多个产品的缓冲区,生产者将生产的产品放入缓冲区中,消费者从缓冲区中取走产品
进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生
产者向一个满的缓冲区中放入产品.
线程通信
等待:
• public final void wait()
• public final void wait(long timeout)
• 必须在对 obj 加锁的同步代码块中。在一个线程中,调用 obj.wait() 时,此线程会释放其拥有的所有锁标记。同时此线程阻塞在o o 的等待队列中。释放锁,进入等待队列。
通知:
• public final void notify()
• public final void notifyAll()
• 必须在对 obj 加锁的同步代码块中。从 obj 的 Waiting 中释放一个或全部线程。对自身没有任何影响.