首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

多线程运行顺序的一个有关问题

2012-04-22 
多线程运行顺序的一个问题各位好最近小弟在写socket的例子,其中用到了多线程。遇到的问题是这样的,在server

多线程运行顺序的一个问题
各位好

最近小弟在写socket的例子,其中用到了多线程。

遇到的问题是这样的,在server端,有一个线程专门负责接收,并存入公共容器container;另有一线程专门负责从container里取数据来处理,为了防止收过快或者处理过快,特作出了以下限制:

1.container里数据快满了时,收线程sleep 1秒,等待处理线程处理一下;
2.处理线程看到container里快没数据时,也sleep 1秒,等待收线程收一下。

但我发现,运行时,两个线程并不是无序地运行,而总是收线程先将container收满,处理线程再进行处理,然后收线程再将container收满。

以我个人的观点,这两个线程应该是乱序进行的,不是吗?

[解决办法]
乱序是乱序,但你这个sleep 1秒,是不是太长了点。。。

1秒钟应该可以处理很多东西了吧,Sleep个10ms感觉都应该顶天了。


不过话说,为啥要防止接收过快或者处理过快呢?没看出必要性啊,没东西处理就轮空一次呗,可以用Thread.yield()释放时间片。
[解决办法]
你用的容器用一个阻塞队列就能实现你要的效果了,
[解决办法]
线程协作,队列空的时候,处理线程等待,队列满的时候,收线程等待,就是一个wait和notify的协调
[解决办法]
卖大饼和吃大饼的问题。这个好像用直接不用管吧。处理之前判断集合有没有货啊。没货就空转。
[解决办法]
低级的实现用 wait和notify控制;
高级点的用队列。

热点排行