线程的创建
- 继承Thread类,重写run方法
- 实现Runnable接口,实现run方法
- 实现Callable接口,实现call方法
线程用法
线程等待
使用wait()方法实现线程等待,必须先持有当前对象的锁。
线程唤醒
使用notify()/notifyAll()方法唤醒线程。
- notify()随机唤醒对象的等待池的一个线程
- notifyAll()唤醒对象的等待池中所有线程。
线程休眠
使用sleep()方法实现线程休眠。
wait和sleep的区别
sleep()方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
死锁
指两个或以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们都将无法推进下去。