永发信息网

java多线程中的死循环

答案:2  悬赏:30  手机版
解决时间 2021-02-11 06:00
public void run(){
try{
ServerSocket ss=new ServerSocket(2000);
while(true){
Socket so=ss.accept();
new ServerThread(so).start();
}
}catch(Exception ee){
ee.printStackTrace();
}
大家帮我看一下这段代码为什么我把这段代码写进线程里面了ss.accept();虽然死循环了但是下面的代码还是可以执行.我试过不写进线程随便写进一个方法的话就会死循环下去了
最佳答案
是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,Socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由JVM调配,而不是按照代码编排的先后顺序了。

另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常Socket.accept()是该放进一个死循环的,也就是你的while(true);
全部回答
如果你对一个线程 start 了,那你的程序中实际上有两个线程,还有一个main 当前线程是main的子线程,实际上运行时,子线程start以后,main的方法还是会继续往下执行,直到退出,当main退出以后,子线程也就死了,当你将死循环写在子线程里,相当与子线程死掉了,但不影响主线程的执行,主线程遇到退出一样退出了程序,当你写在主线程里的死循环,那就在那里循环,因为它没有退出语句 system.exit(0); 或者执行到了最后一个大括号
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
东风风神发动机销售服务中心地址好找么,我有
各位亲们,我想问一下蚂蚁有车的价格如何?
贤良浙江路店(浙江路店)地址在什么地方,想过
尚饰界地址在什么地方,想过去办事
壁挂音箱品牌哪几个比较好
天真地什么成语
有两种植物,一种在强光下生长,一种阴生生长
铃木豪爵(花果店)地址有知道的么?有点事想过
车管所礼拜六,礼拜天,受理业务吗?
艾琳美容会所在什么地方啊,我要过去处理事情
帮我编一首赞美老师的古代诗
红妃全国美容连锁地址在什么地方,想过去办事
本田糸列专业维修地址在什么地方,想过去办事
一把刀一把刀列斯是什么歌,好像是英文歌,很
招聘会对大学生的意义
推荐资讯
怎样才能有效减肥并练出肌肉?
请教一下主板问题,6相供电和8相的优缺点!
血浆蛋白包括
【几句】五绝和七绝是什么每首几句,每句几个
我是安卓手机,下载迅雷,可以打开,但一会就
赛尔号小豆芽怎么快点刷出来
茹雅美容养生地址在什么地方,想过去办事,
最强霸主叶凡最新更新至大结局
上海地铁翔殷路到虹桥机场;浦东机场到翔殷路
鑫泰丽都停车场怎么去啊,我要去那办事
单选题有关秦岭——淮河一线说法错误的是A.1
马来西亚新山,离仙本那多远。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?