中易网

java中如何在一个线程中阻塞其他线程

答案:2  悬赏:10  
解决时间 2021-02-20 01:07
问题具体点是这样的,多个线程中,a线程执行到某一步时阻塞所有线程包括主线程,a线程执行到另一步时唤醒其他线程让 其他线程正常执行(小白跪求大神指导)
最佳答案
假设你有一个主线程,线程名为: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继续执行,大体上就是这样!
全部回答
首先,说下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(); } }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
处女座的人是不是很挑剔?
游乐园什么小吃最好卖我租了两个门面想卖小吃
自己怎么剪卡??!只有剪刀!详细点
脊椎骨摔碎 第十一节
山东省莱西市第二中学地址在什么地方,想过去
HCIO受热分解成HCI和O2,为什么HCI不成气体?
洪武年间的李进是何官职
江西南昌财大附中初一四班的胡云帆喜欢谁?哪
金棕榈星辉国际影城在什么地方啊,我要过去处
成都市龙泉驿有到自贡市荣县的车吗
gtx860m和i7 4710hq,,玩大型游戏的时候显卡
二手房到房产局过户后,买家可不可以单方面到
维体康大药房白象路店怎么去啊,有知道地址的
耕喜台湾水果茶怎么去啊,有知道地址的么
求一朵野花学名
推荐资讯
朝什么什么什么的成语
学美容大概要多久
爱情麻辣拌这个地址在什么地方,我要处理点事
2015年存五年20万利息是多少
绍兴宝顺汽车销售服务有限公司这个地址在什么
大世界美发美容养生我想知道这个在什么地方
好豆好拍怎么样
有人说SSC不报名也有背景,是不是真的
别人从我这拉三相四线电,给他买多大电表
法院判决对方赔偿金,但对方一直以没钱拒不赔
为什么我的CPU核心温度这么高
和爸爸外跷跷板,可爸爸比我重怎么办
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?