Skip to content

Commit

Permalink
Lecture: amend challenges for Multi-Threading lesson
Browse files Browse the repository at this point in the history
  • Loading branch information
cagix committed Jul 3, 2024
1 parent 9f62c11 commit 774b3bd
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 26 deletions.
22 changes: 21 additions & 1 deletion lecture/threads/src/challenges/threads/BlueHamster.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
package threads;

public record BlueHamster(String name, Tunnel tunnel) implements Hamster {}
import java.util.stream.IntStream;

public record BlueHamster(String name, Tunnel tunnel) implements Hamster {

public void idle() {
IntStream.range(0, 5).forEach(i -> System.out.println(name() + ": (blue) wandering idly"));
}

public void moveThroughTunnel() {
System.out.println(name() + ": => (blue) entering tunnel");
tunnel().enter(this);
System.out.println(name() + ": => (blue) entered tunnel");

IntStream.range(0, 2)
.forEach(i -> System.out.println(name() + ": (blue) moving through tunnel"));

System.out.println(name() + ": (blue) leaving tunnel =>");
tunnel().leave(this);
System.out.println(name() + ": (blue) left tunnel =>");
}
}
18 changes: 2 additions & 16 deletions lecture/threads/src/challenges/threads/Hamster.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,13 @@
package threads;

import java.util.stream.IntStream;

public interface Hamster extends Runnable {
String name();

Tunnel tunnel();

default void idle() {
IntStream.range(0, 5).forEach(i -> System.out.println(name() + ": wandering idly"));
}

default void moveThroughTunnel() {
System.out.println(name() + ": => entering tunnel");
tunnel().enter(this);
System.out.println(name() + ": => entered tunnel");
void idle();

IntStream.range(0, 2).forEach(i -> System.out.println(name() + ": moving through tunnel"));

System.out.println(name() + ": leaving tunnel =>");
tunnel().leave(this);
System.out.println(name() + ": left tunnel =>");
}
void moveThroughTunnel();

@Override
default void run() {
Expand Down
10 changes: 5 additions & 5 deletions lecture/threads/src/challenges/threads/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ public class Main {
public static void main(String... args) {
Tunnel tunnel = Tunnel.get();

Hamster bh1 = new BlueHamster("bh1", tunnel);
Hamster bh2 = new BlueHamster("bh2", tunnel);
Hamster bh3 = new BlueHamster("bh3", tunnel);
Hamster bh1 = new BlueHamster("blue1", tunnel);
Hamster bh2 = new BlueHamster("blue2", tunnel);
Hamster bh3 = new BlueHamster("blue3", tunnel);

Hamster rh1 = new RedHamster("rh1", tunnel);
Hamster rh2 = new RedHamster("rh2", tunnel);
Hamster rh1 = new RedHamster("red1", tunnel);
Hamster rh2 = new RedHamster("red2", tunnel);

new Thread(bh1).start();
new Thread(bh2).start();
Expand Down
22 changes: 21 additions & 1 deletion lecture/threads/src/challenges/threads/RedHamster.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
package threads;

public record RedHamster(String name, Tunnel tunnel) implements Hamster {}
import java.util.stream.IntStream;

public record RedHamster(String name, Tunnel tunnel) implements Hamster {

public void idle() {
IntStream.range(0, 5).forEach(i -> System.out.println(name() + ": (red) wandering idly"));
}

public void moveThroughTunnel() {
System.out.println(name() + ": => (red) entering tunnel");
tunnel().enter(this);
System.out.println(name() + ": => (red) entered tunnel");

IntStream.range(0, 2)
.forEach(i -> System.out.println(name() + ": (red) moving through tunnel"));

System.out.println(name() + ": (red) leaving tunnel =>");
tunnel().leave(this);
System.out.println(name() + ": (red) left tunnel =>");
}
}
4 changes: 2 additions & 2 deletions lecture/threads/src/challenges/threads/Tunnel.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ public static Tunnel get() {
}

public void enter(Hamster hamster) {
System.out.println("\t in tunnel (" + hamster.name() + ")");
System.out.println("\ttunnel: " + hamster.name() + ": in");
}

public void leave(Hamster hamster) {
System.out.println("\t cleared tunnel (" + hamster.name() + ")");
System.out.println("\ttunnel: " + hamster.name() + ": cleared");
}
}
2 changes: 1 addition & 1 deletion lecture/threads/threads-synchronisation.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ fhmedia:
challenges: |
**Hamster-Welt**
In den [Vorgaben](/~https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture/tree/master/lecture/threads/src/challenges)
In den [Vorgaben](/~https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture/tree/master/lecture/threads/src/challenges/threads)
finden Sie eine Modellierung für eine Hamsterwelt.
Es gibt rote und blaue Hamster, die sich unabhängig von einander bewegen können. Es gibt einen Tunnel, den die Hamster betreten
Expand Down

0 comments on commit 774b3bd

Please sign in to comment.