java多线程详解(1)-多线程入门 (2)

notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,
当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,
继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。

4 消亡状态:

  当线程的run()方法执行结束后,该线程自然消亡。

四.线程的优先级

1 线程的优先级及设置

  线程的优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。

  一个线程的优先级设置遵从以下原则:

  线程创建时,子继承父的优先级。

  线程创建后,可通过调用setPriority()方法改变优先级。

  线程的优先级是1-10之间的正整数。

  1- MIN_PRIORITY

  10-MAX_PRIORITY

  5-NORM_PRIORITY

  如果什么都没有设置,默认值是5。

  但是不能依靠线程的优先级来决定线程的执行顺序。

2 线程的调度策略

  线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行:

  线程体中调用了yield()方法,让出了对CPU的占用权。

  线程体中调用了sleep()方法,使线程进入睡眠状态。

  线程由于I/O操作而受阻塞。

  另一个更高优先级的线程出现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjgfx.html