0

我有以下场景,我打算知道何时会发生上下文切换。

场景 1:java 线程调用了一个对象的等待,但该线程的时间片仍然存在。

场景 2:- 一个 java 线程正在等待数据库查询的结果,但该线程的时间片仍然存在。

场景 3:- 一个 java 线程正在等待数据库查询的结果,但该线程的时间片仍然完成。

场景 4:- 一个 java 线程正在做一些计算,但该线程的时间片仍然完成。

在上下文切换中可能发生的任何其他情况,但我错过了它?

我正在考虑使用这些方案来确定线程池大小是否可以大于 Runtime.getRuntime.availableProcessors() 谢谢

4

1 回答 1

1

如果一个线程正在做某事,例如调用wait(),这意味着时间片没有用完。如果线程因为调用而被阻塞wait(),或者等待 I/O 结果(包括数据库结果),则不计算时间片。一旦线程被解除阻塞并恢复执行,它就会开始计数。如果时间片用完,这意味着线程一直在运行并且没有以任何方式被阻塞。

因此,您的场景分类不正确。

于 2013-04-02T14:27:34.617 回答