📄 circularbuffer.java
字号:
import javax.swing.*;
public class CircularBuffer implements Buffer
{
private int buffers[]={-1,-1,-1};
private int occupiedBufferCount=0;
private int readLocation=0,writeLocation=0;
private JTextArea outputArea;
public CircularBuffer(JTextArea output)
{
outputArea=output;
}
public synchronized void set(int value)
{
String name=Thread.currentThread().getName();
while(occupiedBufferCount==buffers.length)
{
try
{
SwingUtilities.invokeLater(new RunnableOutput(outputArea,"\nAll buffers full. "+name+" waits."));
wait();
}
catch(InterruptedException exception)
{
exception.printStackTrace();
}
}
buffers[writeLocation]=value;
SwingUtilities.invokeLater(new RunnableOutput(outputArea,"\n"+name+" writes "+buffers[writeLocation]+" "));
++occupiedBufferCount;
writeLocation=(writeLocation+1)%buffers.length;
SwingUtilities.invokeLater(new RunnableOutput(outputArea,creatStateOutput()));
notify();
}
public synchronized int get()
{
String name=Thread.currentThread().getName();
while(occupiedBufferCount==0)
{
try
{
SwingUtilities.invokeLater(new RunnableOutput(outputArea,"\nAll buffer empty."+name+" waits"));
wait();
}
catch(InterruptedException exception)
{
exception.printStackTrace();
}
}
int readValue=buffers[readLocation];
SwingUtilities.invokeLater(new RunnableOutput(outputArea,"\n"+name+" reads "+readValue+" "));
--occupiedBufferCount;
readLocation=(readLocation+1)%buffers.length;
SwingUtilities.invokeLater(new RunnableOutput(outputArea,creatStateOutput()));
notify();
return readValue;
}
public String creatStateOutput()
{
String output="(buffer occupied:"+occupiedBufferCount+")\nbuffers: ";
for(int i=0;i<buffers.length;i++)
output+=" "+buffers[i]+" ";
output+="\n ";
for(int i=0;i<buffers.length;i++)
output+="---- ";
output+="\n ";
for(int i=0;i<buffers.length;i++)
if(i==writeLocation&&writeLocation==readLocation)
output+=" WR ";
else if(i==writeLocation)
output+=" W ";
else if(i==readLocation)
output+=" R ";
else
output+=" ";
output+="\n";
return output;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -