added ex R
This commit is contained in:
parent
53add330f4
commit
a7216b1642
28
src/exercises/ex_r/Customer.java
Normal file
28
src/exercises/ex_r/Customer.java
Normal file
@ -0,0 +1,28 @@
|
||||
package exercises.ex_r;
|
||||
|
||||
public class Customer implements Runnable {
|
||||
private String name;
|
||||
private PostOffice office;
|
||||
|
||||
public Customer(String name, PostOffice office) {
|
||||
this.name = name;
|
||||
this.office = office;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
Package pkg = new Package(this);
|
||||
office.registerPackage(pkg);
|
||||
try {
|
||||
Thread.sleep((long) (1000L + 5000L * Math.random()));
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
15
src/exercises/ex_r/Package.java
Normal file
15
src/exercises/ex_r/Package.java
Normal file
@ -0,0 +1,15 @@
|
||||
package exercises.ex_r;
|
||||
|
||||
public class Package {
|
||||
private Customer sender;
|
||||
public Package(Customer sender) {
|
||||
this.sender = sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Package{" +
|
||||
"sender=" + sender.getName() +
|
||||
'}';
|
||||
}
|
||||
}
|
19
src/exercises/ex_r/PostOffice.java
Normal file
19
src/exercises/ex_r/PostOffice.java
Normal file
@ -0,0 +1,19 @@
|
||||
package exercises.ex_r;
|
||||
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
public class PostOffice {
|
||||
private BlockingQueue<Package> packages = new LinkedBlockingQueue<>();
|
||||
|
||||
public void registerPackage(Package pkg) {
|
||||
packages.add(pkg);
|
||||
System.out.println("Registered " + pkg + " (now " + packages.size() + ")");
|
||||
}
|
||||
|
||||
public Package takePackage() throws InterruptedException {
|
||||
Package pkg = packages.take();
|
||||
System.out.println("Withdrawn " + pkg + " (now " + packages.size() + ")");
|
||||
return pkg;
|
||||
}
|
||||
}
|
22
src/exercises/ex_r/Postman.java
Normal file
22
src/exercises/ex_r/Postman.java
Normal file
@ -0,0 +1,22 @@
|
||||
package exercises.ex_r;
|
||||
|
||||
public class Postman implements Runnable {
|
||||
private PostOffice office;
|
||||
|
||||
public Postman(PostOffice office) {
|
||||
this.office = office;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
Package pkg = office.takePackage();
|
||||
Thread.sleep((long) (1000L + 2000L * Math.random()));
|
||||
System.out.println("Delivered " + pkg);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
10
src/exercises/ex_r/TestingBlockingQueue_PostOffice.java
Normal file
10
src/exercises/ex_r/TestingBlockingQueue_PostOffice.java
Normal file
@ -0,0 +1,10 @@
|
||||
package exercises.ex_r;
|
||||
|
||||
public class TestingBlockingQueue_PostOffice {
|
||||
public static void main(String[] args) {
|
||||
PostOffice postOffice = new PostOffice();
|
||||
(new Thread(new Postman(postOffice))).start();
|
||||
(new Thread(new Customer("Mrs Darbellay", postOffice))).start();
|
||||
(new Thread(new Customer("Mrs Müller", postOffice))).start();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user