首页 > 试题广场 >

下列关于JAVA多线程的叙述正确的是()

[不定项选择题]

下列关于JAVA多线程的叙述正确的是()

  • 调用start()方法和run()都可以启动一个线程
  • CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程
  • Callable类的call()方法可以返回值和抛出异常
  • 新建的线程调用start()方法就能立即进行运行状态
A,start是开启线程,run是线程的执行体,run是线程执行的入口。
B,CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程。前者是让一组线程相互等待到某一个状态再执行。后者是一个线程等待其他线程结束再执行。
C,Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。
D,start是把线程从new变成了runnable
发表于 2018-06-26 21:11:47 回复(5)
A. start()方法来启动线程,真正实现了多线程运行,调用了run()方法;run()方法当作普通方法的方式调用。
B. CyclicBarrier让一组线程等待其他线程;CountDownLatch让一组线程等待某个事件发生。
C. Callable能够抛出checked exception。
D. start()方法让thread进去可运行状态(runnable),等待获取CPU的使用权。
编辑于 2017-07-22 10:09:49 回复(3)
答案 C CyclicBarrier(栅栏):可以让一组线程等待其他线程。 CountDownLatch(闭锁): 可以让一组线程等待某个事件发生。
发表于 2016-12-12 18:02:59 回复(0)
CountDownLatch:允许一个或多个线程等待其他线程完成操作;
CyclicBarrier:同步屏障,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会执行。
发表于 2017-07-23 09:20:52 回复(0)

被 A 误导了。。。

看 Thread.start() 和 Thread.run() 的源码,run 就是一个普通的方法,跟 getXxxx 差不多;start 则不同,在内部,他会调用 native code 创建新的线程。

发表于 2016-12-30 14:05:56 回复(0)
A:run()方法不能启动一个线程
B:CyclicBarrier是障碍器,用于同步一组线程,只有当这组线程都到达障碍点时,最后的处理任务才被执行,因此符合描述;CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行,因此不是让一组线程等待其它线程,而是让一个线程等待一组线程
D:调用start()方法进入就绪状态,什么时候执行不确定,取决于操作系统的cpu分配
发表于 2017-06-06 21:42:59 回复(1)
CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫做同步点时被阻塞),直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续执行。

CountDownLatch允许一个或多个线程等待其他线程操作完成。

关于countDownLatch与cyclicBarrier相关知识可以参考这篇博客http://www.jianshu.com/p/424374d71b67
编辑于 2017-04-10 20:12:39 回复(2)
答案:C
调用start方***创建一个线程对象,且这个线程会进入就绪(可运行)状态,并不是立即进入运行状态
编辑于 2016-12-06 20:37:52 回复(0)
AD是错的,调用run()方法直接调用Runnable的run()方法,相当于一个普通方法,不开启线程。调用start()方法启动一个新的线程,但是要等待CPU的调度,会进入就绪状态,并不一定是立即执行。
发表于 2017-03-13 21:36:42 回复(0)
cyclicBarrier(栏栅),让一组线程等待其他线程 countDownLatch(闭锁),让一组线程等待某个事件发生
编辑于 2017-09-22 20:15:39 回复(0)
CountDownLatch 适用于一组线程和另一个主线程之间的工作协作。一个主线程等待一组工作线程的任务完毕才继续它的执行是使用 CountDownLatch 的主要场景;CyclicBarrier 用于一组或几组线程,比如一组线程需要在一个时间点上达成一致,例如同时开始一个工作。另外,CyclicBarrier 的循环特性和构造函数所接受的 Runnable 参数也是 CountDownLatch 所不具备的。
发表于 2017-02-12 16:04:32 回复(0)
新建的线程调用start()方法就不一定能立即进行运行状态,还需要等待cpu调度,分给时间片才可以运行,不是立即进行运行状态。
发表于 2022-04-01 15:08:51 回复(0)
CyclicBarrier(栅栏):可以让一组线程等待其他线程
CountDownLatch(闭锁):让一组线程等待某个事件发生
发表于 2018-09-21 10:42:14 回复(0)
AD一看就不对,此题为多选,所以答案为BC。
发表于 2018-02-25 10:32:30 回复(0)

答案要点:
CyclicBarrier让一组线程等待其他线程;CountDownLatch让一组线程等待某个事件发生。
前者是等待其他线程,后者是等待某个事件。

发表于 2017-11-03 09:32:40 回复(0)

我选了B&C。我不明白B为什么错误。

API对CountDownLatch的说明是: CountDownLatch: A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

从说明上可以看到,CountDownLatch允许线程等待其它线程完成操作,与答案中“可以让一组线程等待其他线程”并无冲突。

从API的使用角度,这两者的核心方法有两类:

  • 线程完成任务/到达目标点,一个是countDown(),一个是await()。
  • 线程进入等待,一个是await(),一个是await()。

用这两类方法就能实现答案中的“可以让一组线程等待其他线程”。CyclicBarrier只不过用await()实现了两个功能。 CyclicBarrier对于CountDownLatch的最大区别在于:可重置、屏障动作、提前离开线程引起的破坏性处理。但这都与问题无关。

编辑于 2017-02-15 00:57:59 回复(0)
答案B. CyclicBarrier是一个同步辅助类,它允许一组线程相互等待,直到所有线程都达到某个公共屏障点。然后,所有等待的线程都被释放,可以继续执行。CyclicBarrier是可循环使用的,一旦所有线程都到达屏障点,它就会重置,可以再次使用。 CountDownLatch是一个倒计数的同步辅助类,它允许一个或多个线程等待一组操作完成。在初始化时,指定一个计数值,每次完成一个操作时,该计数值减一。当计数值变为零时,所有等待的线程被释放。
发表于 2023-11-11 00:24:10 回复(0)
C选项让我很冲动!害!
太冲动的我被你迷惑,没有看到类以为是接口!c
发表于 2020-04-14 08:41:53 回复(0)
收藏了两个回答
A,start是开启线程,run是线程的执行体,run是线程执行的入口。
B,CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程。前者是让一组线程相互等待到某一个状态再执行。后者是一个线程等待其他线程结束再执行。
C,Callable中的call比Runnable中的run厉害就厉害在有返回值和可以抛出异常。同时这个返回值和线程池一起用的时候可以返回一个异步对象Future。
D,start是把线程从new变成了runnable
 A. start()方法来启动线程,真正实现了多线程运行,调用了run()方法;run()方法当作普通方法的方式调用。
B. CyclicBarrier让一组线程等待其他线程;CountDownLatch让一组线程等待某个事件发生。
C. Callable能够抛出checked exception。
D. start()方法让thread进去可运行状态(runnable),等待获取CPU的使用权。
编辑于 2024-08-17 14:34:32 回复(0)

CountDownLatch是等待一组线程执行完,才执行后面的代码。此时这组线程已经执行完。(执行完后)
CyclicBarrier是等待一组线程至某个状态后再同时全部继续执行线程。此时这组线程还未执行完。(执行完前

发表于 2023-11-03 23:35:43 回复(0)