首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是同步阻塞吗?

是同步阻塞吗?
EN

Stack Overflow用户
提问于 2013-05-04 01:45:51
回答 6查看 770关注 0票数 2

在java中,我的客户端有两个线程,一个是控制网络流量,另一个是处理消息,绘制游戏等。我试图做的是,当一个数据包到来时,网络线程将调用游戏线程的messageReceived方法,其中包含消息作为参数。如果我将函数messageReceived设置为同步,并且在messageReceived函数结束之前有2个数据包连续到达,是否会阻塞网络线程,或者由于网络线程无法调用已经被游戏线程使用的messageReceived函数而不阻塞,我的数据包丢失?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-04 01:49:00

当您使用synchronized关键字来同步代码段时,当另一个线程想要访问该段时,它将阻塞,直到它可以访问为止。

票数 1
EN

Stack Overflow用户

发布于 2013-05-04 01:50:29

正确,你阻塞了IO线程。正因为如此,您只想在messageReceived()上做简单的工作...也许只是在某种FIFO中对消息进行排队,以供处理线程稍后处理。您的同步块应该具有尽可能小的占用空间。

票数 0
EN

Stack Overflow用户

发布于 2013-05-04 01:50:49

如果线程调用类中的同步方法,则所有其他线程将被阻止调用该类中的任何同步方法,因为对象锁不可用。如果你的messageReceived没有在任何共享资源上工作,那么保持它的非同步。如果它正在使用一些共享资源,那么尝试通过将代码包装在同步块中来最小化同步代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16364793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档