私はバッファクラス(BufferCharacter
)からLinkedList
を取得しようとしていて、Reader
クラスのLinkedList
のすべての要素をループしています。しかし、私がをBufferCharacter
クラスのget()
メソッドで返すようにしようとすると、それをReader
クラスでループすることはできません。私はBuffer
クラスのリストをループして、そこから各要素を返そうとしましたが、どちらも機能しません。Linked Link経由でループする
ご協力いただきありがとうございます。
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(オブジェクトo:バッファ){...}。またはリスト反復子ですか? – TungstenX
コードにはさらに問題があります。 get()メソッドとgetSync()メソッドは、バッファが空でない場合(「Waiting」を返してメソッドを終了するまで)「待機」しません。あなたのLinkedListをタイプするほうがいいです。リストバッファ=新しいLinkedList <>(); –
TungstenX
'List'に格納する' Character'の 'char'を全てラップするのはひどい考えです。余分なメモリ割り当てとガベージコレクションは、リソースの愚かな使用になります。 'StringBuilder'を使わないのはなぜですか? –