线程调度:
- 线程调度有分时调度和抢占式调度(java使用)
- setPriority()和getPriority()设置和获取线程的优先级(java优先级从1-10,仅仅表示线程获取时间片的效率,默认优先级为5)
线程控制:
- sleep(long mills)让线程休眠指定的时间(需要抛出异常)
- join()等待该线程终止,只有该线程执行完成之后,其他线程才能执行
- yield()暂停当前执行的线程,执行其他的线程
- public final void setDaemon(boolean on)将当前线程标记为守护线程(当正在运行的所有线程都是守护线程时,jvm退出)
- 中断线程
stop(),终止当前的线程,后面的线程也被终止。(已过时,不建议使用)
interrupt(),终止当前线程,并抛出InterruptException异常。 - start()启动线程
- wait(也可以有参数)执行后该线程进入等待
- notify()唤醒在该对象监视器上等待的单个线程
- notifyAll()唤醒在该对象监视器上等待的所有线程
sleep()和wait()的区别:
- sleep()是Thread类下的静态方法,而wait()是Object中的方法
- sleep()必须指定时间,wait()可以指定也可以不指定
- 执行sleep()方法不会释放锁,而执行wait()方法释放锁。
为什么wait(),notify(),notifyAll()等方法定义在Object类中
因为在使用同步块的时,锁对象是任意对象,而且这三个方法必须通过锁对象来调用,所以设置在Object类下。
线程的生命周期
- 正常的生命周期:
新建----就绪-------运行-----死亡 - 线程生命周期图:
(个人总结,仅供参考,有错请指正,谢谢)