目录
二十四、synchronized是如何保证原子性、可见性、有序性的?
三十二、有了synchronized为什么还需要volatile?
三十七、synchronized和ReentrantLock的区别?
四十三、CountDownLatch、CyclicBarrier、Semaphore区别?
四十五、上面你说父子线程间共享数据,那为什么不用ThreadLocal呢?
五十、CompletableFuture的底层是如何实现的?
一、什么是多线程的上下文切换?
上下文切换是指CPU从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确地运行。
在多线程编程中,上下文切换是一种常见的操作,上下文切换通常是指在一个CPU上,由于多个线程共享CPU时间片,当一个线程的时间片用完后,需要切换到另一个线程运行。此时需要保存当前线程的状态信息,包括程序计数器、寄存器、栈指针等,以便下次继续执行该线程时能够恢复到正确的执行状态。同时,需要将切换到的线程的状态信息恢复,以便于该线程能够正确运行。
在多线程中,上下文切换的开销比直接用单线程大,因为在多线程中,需要保存和恢复更多的上下文信息。过多的上下文切换会降低系统的运行效率,因此需要尽可能减少上下文切换的次数。