有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么Java中有三种“阻塞”线程状态,而C中只有一种?

在Java中,有三种不同的“阻塞”线程状态:阻塞、等待和定时等待(the manual)

在C#中,只有一种“阻塞”状态:WaitSleepJoin(the manual)

为什么??我只能猜测Java和C#各自的实现是不同的。我真的看不出有任何实际的理由为什么应该有三个。有吗?(我首先学习了C#的锁块、Monitor.pulsell()等,今天花了一个半小时用Java调试,因为我假设Java的同步块、对象#notifyAll()等。我知道它们的行为有什么不同,但我不明白为什么。)


共 (1) 个答案

  1. # 1 楼答案

    在java中,我们在同步对象上使用等待和定时等待。如果一个线程处于等待状态,另一个线程必须使用notify()唤醒它

    TIMED_WAITING与WAITING相同,但当超过指定的时间参数时,它将自动继续

    当线程想要运行时,线程处于阻塞状态,但由于另一个线程正在同一同步对象上运行,因此它无法运行

    因此,正如我们所看到的,TIMED_WAITING与WAITING完全相同,但在指定的时间后将停止等待

    但是为什么java将阻塞和等待分离?这是因为如上所述,它们是不同的。阻塞意味着一个线程是可运行的,但由于另一个线程正在运行而无法运行。{cd1}正在等待一个状态

    为什么C#只有一个状态只是一个设计决策。所有java方法都表明线程没有处于可运行状态,C#只是决定将这三种状态组合在一个变量中:WaitSleepJoin