各位好最近小弟在写socket的例子,其中用到了多线程。遇到的问题是这样的,在server端,有一个线程专门负责接收,并存入公共容器container;另有一线程专门负责从container里取数据来处理,为了防止收过快或者处理过快,特作出了以下限制:1.container里数据快满了时,收线程sleep 1秒,等待处理线程处理一下;
2.处理线程看到container里快没数据时,也sleep 1秒,等待收线程收一下。但我发现,运行时,两个线程并不是无序地运行,而总是收线程先将container收满,处理线程再进行处理,然后收线程再将container收满。以我个人的观点,这两个线程应该是乱序进行的,不是吗?

解决方案 »

  1.   

    乱序是乱序,但你这个sleep 1秒,是不是太长了点1秒钟应该可以处理很多东西了吧,Sleep个10ms感觉都应该顶天了。
    不过话说,为啥要防止接收过快或者处理过快呢?没看出必要性啊,没东西处理就轮空一次呗,可以用Thread.yield()释放时间片。
      

  2.   

    线程协作,队列空的时候,处理线程等待,队列满的时候,收线程等待,就是一个wait和notify的协调
      

  3.   

    低级的实现用 wait和notify控制;
    高级点的用队列。
      

  4.   

    问题终于解决了,谢谢楼上各位其实我的问题有一点点小特别,向循环队列里放的不是一条一条完整的指令,而是一个一个字节,指令由多少个字节组成是不确定的。我的解决办法如LS各位说的一样,即处理线程在处理的时候,若取不全一条指令,就等等接收线程。
    接收线程看容器快满了,就等等处理线程。lol,结贴喽。