首页 > 试题广场 >

有关线程的哪些叙述是对的()

[不定项选择题]
有关线程的哪些叙述是对的()
  • 一旦一个线程被创建,它就立即开始运行。
  • 使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
  • 当一个线程因为抢先机制而停止运行,它可能被放在可运行队列的前面。
  • 一个线程可能因为不同的原因停止并进入就绪状态。
我自己最开始的时候只选了BD没选C。看评论里面也对C存疑,通过书籍查证C是可以选的。
在抢先式系统下,由高优先级的线程参与调度。分为2种情况:
1.若多个线程都处于就绪状态,则具有高优先级的线程会在低优先级之前得到执行;
2.在当前线程的运行过程中,如果有较高级别的线程准备就绪,则正在运行的较低级别的线程将被挂起,转到较高级别的线程运行,直到结束后又会转到原来被挂起的线程。
第二种情况就描述了C所代表的情况,可以看到当较高级别的线程抢去运行权并运行完成之后,是先将权利转给原来的线程的,所以C是正确的。
发表于 2020-03-17 16:16:08 回复(7)
个人理解是,这个线程既然是在运行,那么它的优先级应该是线程中最高的,此时因为有了比它优先级更高的其他线程而停止运行,进入可运行队列,当优先级更高的线程运行结束后,它的优先级仍是最高的,所以处于可运行队列的前面
发表于 2019-09-10 10:25:11 回复(3)
一个新创建的线程并不是自动的开始运行的,必须调用它的start()方法使之将线程放入可运行态(runnable state),这只是意味着该线程可被JVM的线程调度程序调度而不是意味着它可以立即运行。
线程的调度是抢先式的,而不是分时间片式的。
具有比当前运行线程高优先级的线程可以使当前线程停止运行而进入就绪状态。
不同优先级的线程间是抢先式的,而同级线程间是轮换式的。
一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法。
而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。
发表于 2020-05-03 11:09:23 回复(2)
C项存疑。
发表于 2019-05-30 22:52:40 回复(16)

D选项 Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,

让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。

        yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保

证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!


编辑于 2019-10-22 18:45:21 回复(0)
正确答案为BD C错误 线程被创建后不可能立即开始运行。不同优先级的线程间是抢先式的,同级线程间是轮转式的。 即使线程因为抢先而停止也不一定就进入可运行队列的前面。而同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。
发表于 2019-10-30 22:52:43 回复(3)
D选项 Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉, 让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保 证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
发表于 2021-03-18 01:18:28 回复(0)
c选项 你既然抢先机制 那又何必弄个队列嘞 这部分我不懂 谁来解释一波
发表于 2019-09-09 11:02:43 回复(1)
c对吗?
发表于 2019-09-05 18:58:39 回复(1)

不同优先级的线程是抢占式 同优先级是轮转式

编辑于 2020-03-09 09:19:37 回复(0)
对于C选型的理解:
就好像在饭堂排队打饭,排到我的时候,来了一个老师,在我们学校,老师是可以插队打饭的,于是,得等老师打完饭才轮到我,而我位于队伍的首位。
发表于 2021-04-28 13:39:40 回复(0)
start()启动后还需要抢占时间片才可以开始运行,大意了
发表于 2020-12-12 16:54:08 回复(0)
个人认为C选项只是存在在这种可能性但是不是绝对的,不同优先级的线程间是抢先式的,而同级线程间是轮转式的,也就是说它不一定会被放到最前面
发表于 2019-10-08 19:33:27 回复(1)
C项:“因抢先机制而停止运行”意味着采用的是抢占式优先调度机制,不是采用的时间片轮转调度机制。
比如:线程playThread正在执行(优先级5),线程backhomeThread正在等待(优先级1)... 这时,优先级更高的线程classThread出现了(优先级10),抢占CPU,开始执行,playThread线程只好等待。
顺便分享下linux进程调度的源码,这段代码是从可运行进程中选取时间片最大的进程运行:

编辑于 2020-04-09 15:06:31 回复(0)
大司马跟我说:这题多捞哦
发表于 2020-02-17 15:34:22 回复(2)
C难道是因为可重入机制?反正我是没读懂
发表于 2019-11-16 23:22:50 回复(1)
C对嘛?
发表于 2019-09-08 18:00:26 回复(0)
C选项的意思可不可能是说如果可运行队列没有其他线程的话那么被抢先的线程重新进去就会排在前面
发表于 2022-03-28 11:01:56 回复(1)
重点就是公平锁了,公平锁,有锁入队,按顺序执行
发表于 2021-09-22 09:36:13 回复(0)