协程的挂起与线程的休眠
协程通过delay(timeMillis)实现挂起,线程通过sleep(timeMillis)实现休眠。但是挂起和休眠存着差异性
协程挂起与线程休眠
相同点:
1.都能达到堵塞的目的;
2.在该状态下(挂起/休眠)都能被终止执行(取消/中断);
3.取消/中断时都会抛出异常
不同点:
1.线程休眠会直接堵塞当前线程,该线程无法再执行其它操作,但是协程挂起不会堵塞当前线程,线程上的其它协程可以继续运行;
2.delay操作只能在协程环境使用,sleep在协程环境和普通线程环境都可使用
3.线程中断抛出的是InterruptedException异常,协程中断抛出的是CancellationException异常
协程的取消与线程的中断
协程的取消与线程的中断,2者十分类似 :
比较 | 调用api | 能被直接取消的状态 | 事务处理时 | 抛出的异常 |
---|---|---|---|---|
协程 | cancel() | delay | 无法被直接取消 | CancellationException |
线程 | interrupt() | sleep | 无法被直接取消 | InterruptedException |
相同点:
1.都是需要处于挂起/休眠状态,才能够直接取消/中断;
2.处于事务处理时,无法直接被取消/中断;
不同点在于: