今天学习完了第八天的内容。总结一下多线程的知识。

   多线程中的几个方法:wait()/yield()/join()/notify()/notifyAll()/sleep()

   yield()方法,表示进程让出cpu的使用权,让其他线程来占用。它仅能让一个线程进入到可运行该状态,而不是等待或者阻塞状态。

   wait()方法,等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则,编译时可以通过,但运行时会报IllegalMonitorStateException的异常。调用任意对象的wait()方法,导致该线程阻塞,该线程不能继续执行,并且该对象上的锁被释放。

         join()方法,线程实例方法,可以使得一个线程在另外一个线程结束后再运行,如果join()方法在一个线程实例上调用,当前运行着的线程将会阻塞直到这个线程实例完成了运行。在join()方法内设定超时时间,使得join()方法的影响在特定超时后失效。

       notify()方法,唤醒在等待该对象同步锁的线程(只唤醒一个,如果有多个在等待),注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。调用任意对象的notify()方法则导致因调用该对象的 wait()方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。

        notifyAll()方法,唤醒所有等待的线程,注意唤醒的是notify之前wait的线程,对于notify之后的wait线程是没有效果的。

        sleep(int  msc)方法,让线程休眠一段时间。

        生产者消费者模式中,如果只有一个生产者,而有多个消费者时,如果只使用notify(),而不是使用notifyAll(),有可能会产生死锁。