Ⅰ java thread中的join函数什么意思
例如在B线程执行的代码中调用A.join()
则表示B线程暂时停止执行,去执行A线程的任务,直到A线程的任务完成后,B线程再开始执行
Ⅱ java中sleep和join和yield和wait和notify的区别
1、sleep()
使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快禅败,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。
例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行;但是高优先级的线程sleep(500)后,低优先级就有机会执行了。
总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。
2、join()
join()方法使调用该方法的线程在此之前执行完毕,也就是等待该方法的线程执行完毕后再往下继续执行。注意该方法也需要捕捉异常。
3、yield()
该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的贺知颤线猛察程有执行的机会。
4、wait()和notify()、notifyAll()
这三个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块内使用。synchronized关键字用于保护共享数据,阻止其他线程对共享数据的存取,但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。
wait()方法使当前线程暂停执行并释放对象锁标示,让其他线程可以进入synchronized数据块,当前线程被放入对象等待池中。当调用notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。
notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。
注意 这三个方法都是java.lang.Object的方法。
Ⅲ java线程中有关join()方法的简单问题(急)!!
只有执行到t2.start() 这个线程才会开启 才有cpu的执行资格 在此之前只有主碰行线程才有执行资格,没洞所以枯吵枯结果是main先执行完
Ⅳ java 线程join()
join();//当前线程邀请调用方法的线程优先执行 在调用方法的线程执行
//结束之前 当前线程不能再次执行
Ⅳ java中的join是如何让主线程等待的
join就是阻塞调用线程,饥哗直到该线程结束后,调用线程才能继续执行。
该影响只存在于执行join方法的线程和调用该线程的线程之间
如在t1线程中调用t2.join(),则高肢滑需要t2线程戚腊执行完后t1方能继续执行
Ⅵ java 的join方法在哪个类
join()是Thread类的来一个方法,t.join()方法阻源塞调用此方法的线程(calling thread),直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程
Ⅶ java 线程 join方法
你采纳的答来案第一句话就是错误的自.
join方法是 谁调用暂停谁
你的那道考试题,答案B,当另一个线程Join方法被调用时,停的是另一个线程,所以不会影响 本线程的运行状态。
按照他的解释 main都等待thread-0了,已经改变了main的状态, 还选B?
Ⅷ java中的join(强制运行)到底是什么意思啊
join就是阻塞调用线程,直到该线程结束后,调用线程才能继续执行。
强制运行join后的线程。
因为main是一条主线程,所有线程都得在它启动之后运行
Ⅸ java的join问题
join方法并不能保证下一个运行的线程神基不是目前正在运行的线程,而是会进行竞争。如果有设置优先级,则优先级高的线程先运行。若没有,则随机。建议你用中断方法进行。
具体方法:
首先拉起两个线程。设置thread2为中断状态。thread1运游野谨行,至进度条100%时,中断thread1,脊森唤醒thread2。thread2运行,至进度条1%时,中断thread2,唤醒thread1。如是循环就可以了。
Ⅹ java 多线线程start和join
//你试一下我这种方法,应该是因为你的线程没有启动,还有线程执源正行完雹巧悔成的先后顺序,在你//打印这一句话的方式来看,是无法准确判断的,我在join方法里面加了10ms的延时,可以达//到你说的效果
packagetest;
publicclassTestThread{
publicstatic宽早voidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
Threadt=newThread(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("in------------");
}
});
t.start();
t.join(10);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("out--------------");
}
}