[size=large][b]Thread的方法[/b][/size]
[size=medium]
[b]sleep()[/b]
1. sleep ()函数有一个参数,通过参数可使线程在指定的时间内进入停滞状态,当指定的时间过后,线程则自动进入可执行状态。[b]blocked线程池[/b]是进入阻塞状态的线程,跟锁没有关系。
2. 当调用sleep ()函数后,线程不会释放它的“锁标志”。

[b]yield()[/b]
1.通过yield ()函数,可使线程进入可执行状态,排程器从可执行状态的线程中重新进行排程。所以调用了yield()的函数也有可能马上被执行。
2. 当调用yield ()函数后,线程不会释放它的“锁标志”。

[b]join()[/b]
调用某线程的该方法,将当前线程与该线程"合并",即等待该线程结束,再恢复当前线程的运行。[i]当前线程[/i]就是当前这行代码所在的线程。
[/size]

[size=large][b]Object的方法[/b][/size]
[size=medium]
[b]wait()、notify()和notifyAll()[/b]
1. wait()函数有两种形式:第一种形式接受一个毫秒值,用于在指定时间长度内暂停线程,使线程进入停滞状态。第二种形式为不带参数,代表waite()在notify()或notifyAll()之前会持续停滞。[b]wait线程池[/b]是被wait的线程的集合,等待被notify。
2. 当对一个对象执行notify()时,会从线程等待池中移走该任意一个线程,并把它放到锁标志等待池中;当对一个对象执行notifyAll()时,会从线程等待池中移走所有该对象的所有线程,并把它们放到锁标志等待池中。[b]锁标志等待池中的线程[/b]就是等待获取该对象的锁权限,synchronized也会让线程进入锁标志等待池。
3. 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。

[color=red]
wait()和notify()因为会对加锁的对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。通过对该对象的wait调用,会让当前线程进入等待状态。[/color]
[/size]