在Java中的多线程是一个抢占式的机制, 而不是分时机制。抢占式机制是有多个线程处于可运行状态, 但是只有一个线程处于运行状态.
共同点
- 
他们都是在多线程环境下, 可以指定线程阻塞时间的操作, 并返回. 
- 
wait()和sleep()都可以通过线程实例的 interupt方法打断暂停的状态, 从而使线程能够立即抛出InteruptedException的异常.
NOTE: 线程的
interupt的方法, 并不会跑出InteruptedException的异常, 该异常是由线程内部跑出的。如果该线程正在执行正常的业务逻辑, 则可以继续执行。只有在执行wait/join/sleep方法的时候, 会立即抛出InteruptedException的异常信息.
不同点
- 
每一个对象都有一个锁来控制同步访问, synchronized关键字可以和对象锁交互, 来实现线程的同步
- 
sleep()方法在调用时, 没有释放锁.wait()方法释放了锁, 让其他线程可以进入同步块执行逻辑
- 
wait,notify,notifyAll只能在同步方法或者同步代码块中执行.sleep可以在任何地方执行
- 
sleep必须捕获异常;wait,notify,notifyAll不用捕获异常
- 
sleep是线程Thread方法, 导致线程暂停执行指定时间, 给其他线程执行的机会. 但是监控状态依然保持, 到时候状态会自动恢复。
- 
wait是Object方法, 调用该对象, 会导致线程放弃当前已经持有的对象锁, 进入当前对象的等待锁定池. 只有对这个对象发送notify或者notifyAll后才能从对象等待锁定池准备获取对象锁进入可运行状态。
 
				 
					