2个基本问题:
当您将System.in转换为扫描器,然后编写“scan.nextLine()”时,在按下“enter”键之前实际发生了什么?线程运行代码时是否处于休眠状态,并且只有在从System.in输入新行字符时才会被唤醒?否则它如何等待用户输入?
当线程“阻塞”时,是否意味着它正在睡眠?还是只是意味着它无法进入某个特定的代码,但可能正在执行其他任务?
2个基本问题:
当您将System.in转换为扫描器,然后编写“scan.nextLine()”时,在按下“enter”键之前实际发生了什么?线程运行代码时是否处于休眠状态,并且只有在从System.in输入新行字符时才会被唤醒?否则它如何等待用户输入?
当线程“阻塞”时,是否意味着它正在睡眠?还是只是意味着它无法进入某个特定的代码,但可能正在执行其他任务?
NEW
:尚未启动的线程处于此状态。RUNNABLE
:在Java虚拟机中执行的线程处于此状态。BLOCKED
:等待监视器锁定的线程处于此状态。WAITING
:无限期等待另一个线程执行特定操作的线程处于此状态。TIMED_WAITING
:等待另一个线程执行操作的线程处于此状态,等待时间最长为指定的等待时间。TERMINATED
:已退出的线程处于此状态。RUNNABLE
状态。System.in
读取数据时,如果没有足够的数据可用,线程将进入BLOCKED
状态。在那里它将等待更多的数据到达或InputStream
关闭,以先发生的为准(不确定System.in
是否可以关闭,但其他流肯定可以),然后再次变为RUNNABLE
。TIMED_WAITING
)和阻塞(BLOCKED
)不是相同的状态,但这两种状态都会使线程在继续执行之前等待某些东西。区别在于,BLOCKED
线程等待某些I/O操作完成(成功或出错),而TIMED_WAITING
线程等待JVM中的其他线程发出信号或经过一定的时间,以先发生的为准。