diff --git a/Technology/ProConUnprotected/.classpath b/Technology/ProConUnprotected/.classpath new file mode 100644 index 0000000..463d5f9 --- /dev/null +++ b/Technology/ProConUnprotected/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Technology/ProConUnprotected/.project b/Technology/ProConUnprotected/.project new file mode 100644 index 0000000..8347d52 --- /dev/null +++ b/Technology/ProConUnprotected/.project @@ -0,0 +1,17 @@ + + + ProConUnprotected + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Technology/ProConUnprotected/.settings/org.eclipse.core.resources.prefs b/Technology/ProConUnprotected/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/Technology/ProConUnprotected/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Technology/ProConUnprotected/.settings/org.eclipse.jdt.core.prefs b/Technology/ProConUnprotected/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9a7984b --- /dev/null +++ b/Technology/ProConUnprotected/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/Technology/ProConUnprotected/src/Buffer.java b/Technology/ProConUnprotected/src/Buffer.java new file mode 100644 index 0000000..f83e439 --- /dev/null +++ b/Technology/ProConUnprotected/src/Buffer.java @@ -0,0 +1,5 @@ + +public interface Buffer { + public void set( int va1ue ); // place value into Buffer + public int get(); // return value from Buffer +} diff --git a/Technology/ProConUnprotected/src/Consumer.java b/Technology/ProConUnprotected/src/Consumer.java new file mode 100644 index 0000000..71c8af2 --- /dev/null +++ b/Technology/ProConUnprotected/src/Consumer.java @@ -0,0 +1,24 @@ + +public class Consumer extends Thread { + private Buffer sharedLocation; + + public Consumer( Buffer shared ) { + super("Consumer"); + sharedLocation = shared; + } + + public void run() { + int sum = 0; + for (int count = 1; count <= 4; count++) { + try { + Thread.sleep((int)(Math.random() * 3001)); + sum += sharedLocation.get(); + } + catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + System.err.println( getName() + " read values totalling: " + sum + " ...DONE"); + } + +} diff --git a/Technology/ProConUnprotected/src/Producer.java b/Technology/ProConUnprotected/src/Producer.java new file mode 100644 index 0000000..77e0347 --- /dev/null +++ b/Technology/ProConUnprotected/src/Producer.java @@ -0,0 +1,22 @@ + +public class Producer extends Thread { + private Buffer sharedLocation; + + public Producer( Buffer shared ) { + super("Producer"); + sharedLocation = shared; + } + + public void run() { + for (int count = 1; count <= 4; count++) { + try { + Thread.sleep((int)(Math.random() * 3001)); + sharedLocation.set(count); + } + catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + System.err.println( getName() + " done producing."); + } +} diff --git a/Technology/ProConUnprotected/src/SharedBufferTest.java b/Technology/ProConUnprotected/src/SharedBufferTest.java new file mode 100644 index 0000000..640a16a --- /dev/null +++ b/Technology/ProConUnprotected/src/SharedBufferTest.java @@ -0,0 +1,15 @@ + +public class SharedBufferTest { + + public static void main(String[] args) { + // TODO Auto-generated method stub + Buffer sharedLocation = new UnsynchronizedBuffer(); + + Producer producer = new Producer( sharedLocation); + Consumer consumer = new Consumer( sharedLocation); + + producer.start(); + consumer.start(); + } + +} diff --git a/Technology/ProConUnprotected/src/UnsynchronizedBuffer.java b/Technology/ProConUnprotected/src/UnsynchronizedBuffer.java new file mode 100644 index 0000000..1ba7b20 --- /dev/null +++ b/Technology/ProConUnprotected/src/UnsynchronizedBuffer.java @@ -0,0 +1,15 @@ + +public class UnsynchronizedBuffer implements Buffer { + private int buffer = -1; + + public void set( int value ) { + System.err.println( Thread.currentThread().getName() + " writes " + value); + buffer = value; + } + + public int get() { + System.err.println( Thread.currentThread().getName() + " reads " + buffer); + return buffer; + } + +}