java 线程 join方法
在一个线程中调用下列方法,不会改变该线程运行状态的是A.yield方法B.另一个线程的join方法C.sleep方法D.一个对象的notify方法正确答案:B解析:线程调...
在一个线程中调用下列方法,不会改变该线程运行状态的是
A.yield方法
B.另一个线程的join方法
C.sleep方法
D.一个对象的notify方法
正确答案:B
解析:线程调用yield()方法使线程从运行状态转入可运行状态;线程调用sleep()方法使线程由运行状态转入阻塞状态;线程调用一个对象的notify()方法可使线程从阻塞状态转变为可运行状态。
解析:另一个线程的join方法是使得另一个线程等待,直到本线程结束为止,另一个线程恢复到可运行状态,不会改变本线程运行状态。
题目和解释如上.
但是我的理解不一样
假设现在有两个线程 main 和 Thread-0
在main线程里调用Thread-0的join(). 不应该是main要等Thread-0跑完 main才能跑吗? 展开
A.yield方法
B.另一个线程的join方法
C.sleep方法
D.一个对象的notify方法
正确答案:B
解析:线程调用yield()方法使线程从运行状态转入可运行状态;线程调用sleep()方法使线程由运行状态转入阻塞状态;线程调用一个对象的notify()方法可使线程从阻塞状态转变为可运行状态。
解析:另一个线程的join方法是使得另一个线程等待,直到本线程结束为止,另一个线程恢复到可运行状态,不会改变本线程运行状态。
题目和解释如上.
但是我的理解不一样
假设现在有两个线程 main 和 Thread-0
在main线程里调用Thread-0的join(). 不应该是main要等Thread-0跑完 main才能跑吗? 展开
5个回答
推荐于2016-04-10 · 知道合伙人数码行家
关注
展开全部
您好,提问者:
当main线程调用到Thread-0的时候,这个时候main线程是等待状态,直到join守护完毕才执行下面的东西。
join方法是先将线程池中的其它线程wait状态,join执行完毕,又调用了notifyAll()唤醒所有线程中的线程。
当main线程调用到Thread-0的时候,这个时候main线程是等待状态,直到join守护完毕才执行下面的东西。
join方法是先将线程池中的其它线程wait状态,join执行完毕,又调用了notifyAll()唤醒所有线程中的线程。
更多追问追答
追问
请问一下 你觉得答案是B吗?
追答
选择B是正确的。
notify肯定是不对的,因为notfiy是唤醒,线程处于等待状态才会去notify,当调用notify的话已经改变了线程状态了。
而join是守护线程执行完毕,不会改变其自身状态。
展开全部
你采纳的答案第一句话就是错误的.
join方法是 谁调用暂停谁
你的那道考试题,答案B,当另一个线程Join方法被调用时,停的是另一个线程,所以不会影响 本线程的运行状态。
按照他的解释 main都等待thread-0了,已经改变了main的状态, 还选B?
join方法是 谁调用暂停谁
你的那道考试题,答案B,当另一个线程Join方法被调用时,停的是另一个线程,所以不会影响 本线程的运行状态。
按照他的解释 main都等待thread-0了,已经改变了main的状态, 还选B?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-12-02 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
*
* public final void join():等待该线程终止。
*/
public class ThreadJoinDemo {
public static void main(String[] args) {
ThreadJoin tj1 = new ThreadJoin();
ThreadJoin tj2 = new ThreadJoin();
ThreadJoin tj3 = new ThreadJoin();
tj1.setName("李渊");
tj2.setName("李世民");
tj3.setName("李元霸");
tj1.start();
try {
tj1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
tj2.start();
tj3.start();
}
}
class ThreadJoin extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
}
只有在tj1线程执行完后其他线程才开始执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-06
展开全部
这个解释是有点扯淡,我觉得应该是 D。 notify是通知其他阻塞的线程可以转变状态。
追问
我也选是D 但是看答案是B 就纠结了
追答
你的好评答案你能看懂?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-06
展开全部
main是死的最快的线程。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询