我試圖從我的緩衝區類(BufferCharacter
)中獲得LinkedList
,然後循環遍歷Reader
類中的LinkedList
中的每個元素。但是,當我嘗試返回LinkedList
中的get()
方法BufferCharacter
類I則無法在Reader
類中循環。我試圖循環遍歷Buffer
類中的列表,然後從那裏返回每個元素,但那也不起作用。循環遍歷LinkedList
任何幫助,高度讚賞!
public class CharacterBuffer {
private char ch;
private LinkedList buffer = new LinkedList();
private boolean filled;
public void put(char ch) {
buffer.addLast(ch);
}
public void filled() {
filled = true;
}
public Object get() throws InterruptedException {
while (buffer.isEmpty()) {
// wait();
return "Waiting";
}
return buffer;
}
public synchronized void putSync(char ch) {
buffer.addLast(ch);
}
public synchronized Object getSync() throws InterruptedException {
while (buffer.isEmpty()) {
// wait();
return "---------";
}
for(int i = 0; i<buffer.size(); i++){
System.out.println(buffer.get(i));
}
return buffer;
}
public int size(){
return buffer.size();
}
}
public class Reader extends Thread {
private GUIMutex gui;
private CharacterBuffer buffer;
private boolean isSynced;
public Reader(GUIMutex gui, CharacterBuffer buffer, boolean isSynced) {
this.gui = gui;
this.buffer = buffer;
this.isSynced = isSynced;
}
public void run() {
String data = "test";
while (true) {
try {
// data = buffer.get();
if (isSynced) {
gui.setReaderText(buffer.getSync() + "\n");
} else {
for(int i = 0; i<buffer.get().size(); i++){
gui.setReaderText(i);
}
gui.setReaderText(buffer.get() + "\n");
}
Thread.sleep(700);
} catch (InterruptedException e) {
}
}
}
}
你有沒有看Java的for循環優化?例如。 for(Object o:buffer){...}。或者列表迭代器? – TungstenX
您的代碼存在更多問題。 get()和getSync()方法在緩衝區不爲空之前不會「等待」(它將返回「Waiting」並退出方法)。最好輸入你的LinkedList,例如列表 buffer = new LinkedList <>(); –
TungstenX
將'Character'中的每個'char'包裝到'List'中是一個糟糕的主意。額外的內存分配和垃圾收集將是對資源的一種愚蠢使用。爲什麼不使用'StringBuilder'? –