java中如何在一个线程中阻塞其他线程
答案:2 悬赏:10
解决时间 2021-02-20 01:07
- 提问者网友:一人心
- 2021-02-19 19:43
问题具体点是这样的,多个线程中,a线程执行到某一步时阻塞所有线程包括主线程,a线程执行到另一步时唤醒其他线程让 其他线程正常执行(小白跪求大神指导)
最佳答案
- 二级知识专家网友:孤伤未赏
- 2021-02-19 20:03
假设你有一个主线程,线程名为:Thread_A,然后通过Thread_A创建了线程Thread_B、Thread_C,并将线程Thread_B、Thread_C作为局部变量的方式存储在Thread_A中,并调用Thread_B、Thread_C的start()方法开始执行Thread_B、Thread_C,当Thread_A执行到你要停止的地方就分别调用Thread_B、Thread_C的Wait()方法,使Thread_B、Thread_C暂停,然后线程Thread_A继续执行,直到Thread_A中调用Thread_B、Thread_C的notify()方法使得Thread_B、Thread_C继续执行,大体上就是这样!
全部回答
- 1楼网友:陪衬角色
- 2021-02-19 20:11
首先,说下join方法,join方法的作用是,让当前线程等待当前调用join方法的线程执行完毕后,然后再继续执行,这个不太好理解,简单点说,你执行t1.join,那么就是阻塞当前线程,让t1先执行。好,再来说楼主的问题:
楼主调用t1.join()的并不是t2线程而是main函数的主线程,所以他并不会阻塞t2,而是会阻塞main方法,如果楼主把最后的for循环打开,你会发现,输出“22222222”肯定是在t1执行完之后。如果想阻塞t2,你的代码还要大改下:(我没有调试,你自己改下,思想肯定是对的)
class xiancheng6 implements runnable
{
private thread thread;
public xiancheng6(thread thread){
this.thread = thread;
}
public void run()
{
for(int i=0;i<20;i++)
{
if (i == 3 && thread != null)
{
try
{
thread.join();
}
catch (interruptedexception e)
{
}
}
system.out.println(thread.currentthread().getname()+"被执行");
try
{
thread.sleep(100);
}
catch (interruptedexception e)
{
}
}
}
}
public class threadtester {
public static void main(string[] args) {
thread t1=new thread(new xiancheng6(null));
thread t2=new thread(new xiancheng6(t1));
t1.start();
t2.start();
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯