写点什么

Thread 的状态改变操作学习笔记

用户头像
风翱
关注
发布于: 刚刚

Thread 的状态改变操作


1. Thread.sleep(long millis),一定是当前线程调用此方法,当前线程进入 TIMED_WAITING 状态,但不释放对象锁,millis 后线程自动苏醒进入就绪状态。作用:给其它线程执行机会的最佳方式。


2. Thread.yield(),一定是当前线程调用此方法,当前线程放弃获取的 CPU 时间片,但不释放锁资源,由运行状态变为就绪状态,让 OS 再次选择线程。作用:让相同优先级的线程轮流执行,但并不保证一定会轮流执行。实际中无法保证 yield() 达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。Thread.yield() 不会导致阻塞。该方法与 sleep() 类似,只是不能由用户指定暂停多长时间。


3. t.join()/t.join(long millis),当前线程里调用其它线程 t 的 join 方法,当前线程进入 WAITING/TIMED_WAITING 状态,当前线程不会释放已经持有的对象锁,因为内部调用了 t.wait,所以会释放 t 这个对象上的同步锁。线程 t 执行完毕或者 millis 时间到,当前线程进入就绪状态。其中,wait 操作对应的 notify 是由 jvm 底层的线程执行结束前触发的。


4. obj.wait(),当前线程调用对象的 wait() 方法,当前线程释放 obj 对象锁,进入等待队列。依靠 notify()/notifyAll() 唤醒或者 wait(long timeout) timeout 时间到自动唤醒。唤醒会,线程恢复到 wait 时的状态。


5. obj.notify() 唤醒在此对象监视器上等待的单个线程,选择是任意性的。notifyAll() 唤醒在此对象监视器上等待的所有线程。

发布于: 刚刚阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Thread 的状态改变操作学习笔记