Separating into Tech and SysDev
This commit is contained in:
6
Technology/MonitorCase1/.classpath
Normal file
6
Technology/MonitorCase1/.classpath
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
17
Technology/MonitorCase1/.project
Normal file
17
Technology/MonitorCase1/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>MonitorCase1</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
11
Technology/MonitorCase1/.settings/org.eclipse.jdt.core.prefs
Normal file
11
Technology/MonitorCase1/.settings/org.eclipse.jdt.core.prefs
Normal file
@@ -0,0 +1,11 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
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.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
28
Technology/MonitorCase1/src/Buffer.java
Normal file
28
Technology/MonitorCase1/src/Buffer.java
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
public class Buffer {
|
||||
private char[] buffer;
|
||||
private int count = 0, in = 0, out = 0;
|
||||
|
||||
Buffer(int size) {
|
||||
buffer = new char[size];
|
||||
}
|
||||
|
||||
public synchronized void Put(char c) {
|
||||
while (count == buffer.length)
|
||||
;
|
||||
System.out.println("Producing " + c + " ...");
|
||||
buffer[in] = c;
|
||||
in = (in + 1) % buffer.length;
|
||||
count++;
|
||||
}
|
||||
|
||||
public synchronized char Get() {
|
||||
while (count == 0)
|
||||
;
|
||||
char c = buffer[out];
|
||||
out = (out + 1) % buffer.length;
|
||||
count--;
|
||||
System.out.println("Consuming " + c + " ...");
|
||||
return c;
|
||||
}
|
||||
}
|
||||
28
Technology/MonitorCase1/src/PC.java
Normal file
28
Technology/MonitorCase1/src/PC.java
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Run this code.
|
||||
* 1: What happens ?
|
||||
* 2: Why does it happen ?
|
||||
*
|
||||
* Code courtesy of www.csc.villanova.edu/~mdamian/threads/javamonitors.html
|
||||
*/
|
||||
public class PC {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Buffer b = new Buffer(4);
|
||||
Producer p = new Producer(b);
|
||||
Consumer c = new Consumer(b);
|
||||
|
||||
p.start();
|
||||
c.start();
|
||||
|
||||
try {
|
||||
p.join();
|
||||
c.join();
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("End");
|
||||
}
|
||||
|
||||
}
|
||||
27
Technology/MonitorCase1/src/ProCon.java
Normal file
27
Technology/MonitorCase1/src/ProCon.java
Normal file
@@ -0,0 +1,27 @@
|
||||
class Producer extends Thread {
|
||||
private Buffer buffer;
|
||||
|
||||
Producer(Buffer b) {
|
||||
buffer = b;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
buffer.Put((char) ('A' + i % 26));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Consumer extends Thread {
|
||||
private Buffer buffer;
|
||||
|
||||
Consumer(Buffer b) {
|
||||
buffer = b;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
buffer.Get();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user