📄 holdintegersynchronized.java
字号:
// Fig. 15.6: HoldIntegerSynchronized.java
// Definition of class HoldIntegerSynchronized that
// uses thread synchronization to ensure that both
// threads access sharedInt at the proper times.
import javax.swing.JTextArea;
import java.text.DecimalFormat;
public class HoldIntegerSynchronized {
private int sharedInt[] = { 0,0,0,0,0};
private boolean writeable = true;
private boolean readable = false;
private int readLoc = 0, writeLoc = 0;
private JTextArea output;
public HoldIntegerSynchronized( JTextArea o )
{
output = o;
}
public synchronized void setSharedInt( int val )
{
while ( !writeable ) {
try {
//output.append( "\n waiting the Producer...... " + val );
wait();
}
catch ( InterruptedException e ) {
System.err.println( e.toString() );
}
}
sharedInt[ writeLoc ] = val;
readable = true;
output.append( "\nProduced " + val +
" to buffer " + writeLoc );
writeLoc = ( writeLoc + 1 ) % 5;
//output.append( "\twrite " + writeLoc +
// "\tread " + readLoc);
displayBuffer( output, sharedInt );
if ( writeLoc == readLoc ) {
writeable = false;
output.append( "\nbuffer is full" );
}
notify();
}
public synchronized int getSharedInt()
{
int val;
while ( !readable ) {
try {
// output.append( "\n waiting to Consume......" );
wait();
}
catch ( InterruptedException e ) {
System.err.println( e.toString() );
}
}
writeable = true;
val = sharedInt[ readLoc ];
output.append( "\nConsumed " + val +
" from buffer " + readLoc );
readLoc = ( readLoc + 1 ) % 5;
//output.append( "\twrite " + writeLoc +
// "\tread " + readLoc );
displayBuffer( output, sharedInt );
if ( readLoc == writeLoc ) {
readable = false;
output.append( "\nbuffer is empty" );
}
notify();
return val;
}
public void displayBuffer( JTextArea out, int buf[] )
{
DecimalFormat formatNumber = new DecimalFormat( " #;-#" );
output.append( "\nbuffer: " );
for ( int i = 0; i < buf.length; i++ )
out.append( " " + formatNumber.format( buf[ i ] ));
}
}
/**************************************************************************
* (C) Copyright 1999 by Deitel & Associates, Inc. and Prentice Hall. *
* All Rights Reserved. *
* *
* DISCLAIMER: The authors and publisher of this book have used their *
* best efforts in preparing the book. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or *
* consequential damages in connection with, or arising out of, the *
* furnishing, performance, or use of these programs. *
*************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -