Separating into Tech and SysDev

This commit is contained in:
2022-05-07 23:24:08 +02:00
parent ae93dfdacb
commit e49df859aa
88 changed files with 0 additions and 0 deletions

View 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;
}
}

View 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");
}
}

View 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();
}
}
}