java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?
既然你已經(jīng)使用了動詞’push’和’poll’,那么你似乎在尋找一個(gè)不是列表的隊(duì)列.
因此,我認(rèn)為您正在尋找記錄為here的ConcurrentLinkedQueue.
它允許您讓UserRequest對象提供它并使用Poller對象來使用它.
雖然看起來你的Poller對象會有很高的CPU占用率,因?yàn)闆]有任何等待是開放的:
public class Poller implements Runnable {
Queue colors = new ConcurrentLinkedQueue();
public void poll() {
while(this.colors.isEmpty()){
Thread.currentThread().wait();
}
String color = this.colors.poll();
while(color != null) {
if(color == "") {
//do work
} else {
//do work
}
color = this.colors.poll();
}
}
@Override
public void run() {
colors.offer("Violet");
colors.offer("Green");
colors.offer("Yellow");
colors.offer("Orange");
while(true) {
this.poll();
}
}
}
此代碼需要進(jìn)行一些更改才能運(yùn)行,但它包含您需要的所有內(nèi)容.
它的作用非常簡單:它一直保持輪詢,直到?jīng)]有剩余元素為止.
一旦發(fā)生這種情況,Poller對象會詢問它當(dāng)前的Thread是否處于休眠狀態(tài),因?yàn)闆]有任何點(diǎn)可以在沒有Queue中的元素的情況下運(yùn)行.
public class UserRequest implements Runnable {
@Override
public void run() {
String request;
Scanner input = new Scanner(System.in);
while(true) {
System.out.println("Please enter request:");
request = input.nextLine();
try {
//do something
} catch(IOException e) {
e.printStackTrace();
} finally {
this.notifyAll(); // Notifies all sleeping threads to wake up
}
}
}
如果您注意到,我只向您的UserRequest類添加了notifyAll調(diào)用.為什么?非常簡單:notifyAll喚醒所有等待的線程,這正是所有沒有元素的Poller正在做的事情.
一旦被調(diào)用,Pollers將喚醒,檢查他們的顏色隊(duì)列是否有元素并使用它們.如果Queue沒有元素,它們將再次休眠,直到UserRequest再次喚醒它們,依此類推.
總結(jié)
以上是生活随笔為你收集整理的java 连接两个arraylist,java – 在两个线程之间共享一个ArrayList?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php接口调用实例源代码,小蚂蚁学习AP
- 下一篇: c语言以冒号分割字符串,C语言里面的冒号