目前遇到这么一个场景:假设有线程A,B,C,D。线程A相当于生产者。线程B,C从线程A中获得产品,经过自己的处理后再由D获取。有几个限制条件,A生产一个产品的前提条件是B,C已经从A中获取了之前的一个产品。B,C从A中获取产品的条件是D已经将B,C中已经处理完的结果获取完。上面废话了一大推,没耐心看也无所谓,我主要想问的是下面这个问题:当一个线程中的run()方法中有while(true){}循环的话,当在,在while循环内并没有写sleep,wait等挂起操作。这样,当跑了这个线程的话,就把1个CPU核使用率占满了。这种情况很恐怖哎,我的线程要监控另外一个线程的状况,就必须得要用while(true)来获取另一线程的状况啊。这么一来CPU启不是就希望大家给我一个好的方法,用于线程对线程监控这种情况。

解决方案 »

  1.   

    监控也不需要每时啊,当然是sleeep一定时间再判断啦你说的ABCD的情况就应当使用wait来操作啊。完全没有必要while循环和监控
      

  2.   

    方法1:经典的生产者与消费者:A是B,C的生产者,B、C是A的消费者,同时B、C是D的生产者,而D是B、C的消费者。最简单的做法是:用Piped管道流就算了(不用考虑烦恼的同步与互斥的问题
    方法2:用并发的数据结构如:ConcurrentLinkedQueue之类的。也是不用考虑烦恼的同步与互斥的问题
    方法3:自己用wait()/notifyAll()写同步与互斥结构。
      

  3.   

    我试过了啦,在while里都加了sleep,但是CPU还是100%wait是个方法,但我就想了解下如果不用wait就不行么
      

  4.   

    但我就想了解下如果不用wait就不行么可以啊。不用wait,参见#2楼的方法论1与方法2
      

  5.   

    可以用socket吗?
    监听的线程做server监听,这样的话,等有信息发过来才会处理
    而不会一直在while true里占用cpu那样无限循环
      

  6.   

    呵呵,这个跟socket没关系的。这个是复杂一点的生产者消费者模式,要用线程监控的话,还是同步枷锁,wait() notify()吧
      

  7.   

    为什么一个while(true) CPU占用率就满了呢?
      

  8.   

    如果没有sleep或者wait,当然占满所有的CPU,因为只要CPU还有空闲它就继续运行啊。所以必须wait或者sleep