sharedcell.java

来自「this file shows look like galaxy」· Java 代码 · 共 99 行

JAVA
99
字号
 // 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 + =
减小字号Ctrl + -
显示快捷键?