📄 sharedcell.java
字号:
// Show multiple threads modifying shared object.
public class SharedCell
{
public static void main( String args[] )
{
HoldIntegerUnsynchronized h = new HoldIntegerUnsynchronized();
ProduceInteger p = new ProduceInteger( h );
ConsumeInteger c = new ConsumeInteger( h );
p.start();
c.start();
}
}
// Definition of threaded class ProduceInteger
public class ProduceInteger extends Thread
{
private HoldIntegerUnsynchronized pHold;
public ProduceInteger( HoldIntegerUnsynchronized h )
{
super( "ProduceInteger" );
pHold = h;
}
public void run()
{
for ( int count = 1; count <= 10; count++ )
{
// sleep for a random interval
try
{
Thread.sleep( (int) ( Math.random() * 3000 ) );
}
catch( InterruptedException e )
{
System.err.println( e.toString() );
}
pHold.setSharedInt( count );
}
System.err.println( getName() + " finished producing values" + "\nTerminating " + getName() );
}
}
// Definition of threaded class ConsumeInteger
public class ConsumeInteger extends Thread
{
private HoldIntegerUnsynchronized cHold;
public ConsumeInteger( HoldIntegerUnsynchronized h )
{
super( "ConsumeInteger" );
cHold = h;
}
public void run()
{
int val, sum = 0;
do
{
// sleep for a random interval
try
{
Thread.sleep( (int) ( Math.random() * 3000 ) );
}
catch( InterruptedException e )
{
System.err.println( e.toString() );
}
val = cHold.getSharedInt();
sum += val;
}
while ( val != 10 );
System.err.println( getName() + " retrieved values totaling: " + sum + "\nTerminating " + getName() );
}
}
// Definition of class HoldIntegerUnsynchronized
public class HoldIntegerUnsynchronized
{
private int sharedInt = -1;
public void setSharedInt( int val )
{
System.err.println( Thread.currentThread().getName() + " setting sharedInt to " + val );
sharedInt = val;
}
public int getSharedInt()
{
System.err.println( Thread.currentThread().getName() + " retrieving sharedInt value " + sharedInt );
return sharedInt;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -