线程
线程状态
一、阻塞状态:
-
Blocked
-
waiting
-
time_waiting
线程关键字
一、sleep()方法
-
方法类型
静态方法
-
状态变更
Thread.sleep()
方法会阻塞当前调用该方法的线程,状态为:time_waiting,线程睡眠到期后自动苏醒,返回到可运行状态(就绪状态)。不保证苏醒后立即执行。 -
实际执行时间
可以指定休眠时间,但是实际休眠时间会大于该休眠时间。
-
时间片
会出让时间片,允许各种优先级的线程得以执行,强制上下文切换。
-
锁
不会释放锁标志。
二、yeild()方法
-
方法类型:
静态方法
-
状态变更:
仍然保持runnable状态,不会出让锁。线程提出,让出cpu时间片的请求,让相同优先级的别的线程可以获得运行的机会,但最终cpu选择哪个线程,还要看情况,有可能仍然执行相同的线程。
例如,一个线程循环10次算结束,可以在执行到第五次的时候,提出出让时间片,给别的线程执行的机会。
-
时间片:
出让时间片
-
释放“锁标志”
三、join()方法
-
方法类型:
普通方法
-
状态变更:
将指定的线程加入到当前线程中,当前线程执行wait()方法实现等待,处于waiting状态。一直到指定的线程执行完毕或者被打断。
四、wait()方法
-
方法类型
普通方法,属于Object对象
-
状态变更
当线程A调用wait()方法后,会变成waiting,time_waiting状态。放弃对象锁,进入对象等待池中,等待池中的对象不会去竞争同步锁。
A线程被B线程通过notify()唤醒后,进入锁标志等待池中,A会变成blocked状态,之后参与锁的竞争,竞争成功之后变为runnable状态。B线程不会立即将线程控制权交出去。
-
锁标志
释放。当前线程暂停执行,放入对象等待池中。调用nodify方法之后,进入锁标志等待池中。
-
时间片
释放CPU执行时间