while(true){
synchronized(obj){
continue;
}
}
上代码中,循环的第一次,通过同步获得资源锁后执行continue操作符进入下一次循环;那么获得的资源锁,是继续持持有到循环的下一次,还是释放资源锁后进入循环的下一次时再竞争锁?
循环中的多线程同步
答案:2 悬赏:60 手机版
解决时间 2021-02-04 02:05
- 提问者网友:几叶到寒
- 2021-02-03 20:33
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-02-03 21:47
释放后重新锁,因为while语句不在synchronized管理的范围内
全部回答
- 1楼网友:你哪知我潦倒为你
- 2021-02-03 22:29
是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由jvm调配,而不是按照代码编排的先后顺序了。 另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常socket.accept()是该放进一个死循环的,也就是你的while(true);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
正方形一边上任一点到这个正方形两条对角线的 |
阴历怎么看 ? |