我用ArrayList当做消息列队接受多个客户端传入的信息
然后另一个类再从这个ArrayList中一个一个的取出处理我现在的问题不知道 怎么才能让这个处理类 知道ArrayList是否有大于1个消息
小弟是初学者 只会做个while死循环while(true)
{
if(ArrayList多与1)
{
处理
}
}但这样做明显是错误的 CPU占用不堪入目
小弟求解应该怎么设计才是正确的呢
不知道我是否描述的清楚
然后另一个类再从这个ArrayList中一个一个的取出处理我现在的问题不知道 怎么才能让这个处理类 知道ArrayList是否有大于1个消息
小弟是初学者 只会做个while死循环while(true)
{
if(ArrayList多与1)
{
处理
}
}但这样做明显是错误的 CPU占用不堪入目
小弟求解应该怎么设计才是正确的呢
不知道我是否描述的清楚
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
} class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
} class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
int length = ArrayList.size(),用之前先判断它是否为null,这里我也建议用线程去做。
对对 我就是这个意思
但是问题不在这
问题是 你不知道ArrayList里何时有信息
你怎样判断?
就像我 做了一个死循环判断
处理}
LinkedList<String> list = new LinkedList<String>();
Object synObj = new Object();
public void processList() throws InterruptedException
{
if(list.isEmpty())
{
synchronized (synObj)
{
synObj.wait();
}
}
doSomthing(list.removeFirst());
}
public void addList(String str)
{
synchronized (synObj)
{
list.add(str);
synObj.notify();
}
}
private void doSomthing(String temp)
{
// to do your work
}
好神奇啊!
为什么这样做CPU就很正常???
谁能给我解释下 谢谢啦
为什么我原来这样做就很浪费CPU?
if (list.size > 0){
处理 }
while(true)
{
if(ArrayList多与1)
{
处理
} else{
try{Thread.sleep(10);}catch(Exception e){}
}
}