Object中的线程方法
wait方法:当一个线程调用一个共享变量的·wait()方法时,该线程会被阻塞挂起。
注意:若其他线程调用了该线程的interrupt方法,该线程会抛出InterruptException异常;若调用wait方法的线程没有获得锁监视器,则会抛出IllegalMonitorStateExcepition异常。
notify:一个线程调用共享对象的nofity()方法后,会随机唤醒一个在该共享变量上调用wait系列方法后被挂起的线程。
只有调用线程获得了共享变量的锁监视器,否则也会抛出IllegalMonitorStateExcepition异常。
Thread中的线程方法
yield:暂停当前正在执行的线程对象,并执行其他线程。
sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),并不释放线程所占有的资源。
start:将当前线程加入就绪队列,与其他线程竞争锁资源。
exit:退出当前线程。
interrupt :中断线程。
join: 拒绝上下文切换,保证该线程顺利执行(等待该线程终止)。
线程的状态
NEW: 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码。
RUNNABLE:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。
BLOCKED:所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。
WAITING:线程处于等待的状态需要被唤醒。
TIMED_WAITING:这个状态和WAITING状态的区别就是,这个状态的等待是有一定时效的,即可以理解为WAITING状态等待的时间是永久的,即必须等到某个条件符合才能继续往下走,否则线程不会被唤醒。但是TIMED_WAITING,等待一段时间之后,会唤醒线程去重新获取锁。
TERMINATED:线程执行结束之后的状态。