Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在用户态和核心态之间切换,这种切换会消耗大量的系统资源,因为用户态与内存态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核,内核也需要保护好用户态在切换时的一些寄存器值,变量等,以便内核态调用结束后切换会用户态继续工作。
1.如果高频进行线程的切换操作,将消耗许多CPU的处理时间
2.如果对那些需要同步的简单的代码块,获取锁挂起操作消耗的时间比用户代码执行的时间还要长,这种同步策略显然是糟糕的。
synchronized会导致争不到锁的线程进入阻塞状态,所以它是重量级锁。
为什么线程唤醒和阻塞的代价大?
最新推荐文章于 2022-12-06 15:41:05 发布