Browse Source

Dateien hochladen nach „praktkum3“

master
Maximilian Haeussler 1 month ago
parent
commit
83e38c9650

+ 125
- 0
praktkum3/DiningPhilosophers.java View File

@@ -0,0 +1,125 @@
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class DiningPhilosophers {
// Anzahl der Philosophen
private static final int NUM_PHILOSOPHERS = 5;
public static void main(String[] args) {
Philosopher[] philosophers = new Philosopher[NUM_PHILOSOPHERS];
Fork[] forks = new Fork[NUM_PHILOSOPHERS];
// Initialisiere Gabeln
for (int i = 0; i < NUM_PHILOSOPHERS; i++) {
forks[i] = new Fork(i);
}
// Initialisiere Philosophen
for (int i = 0; i < NUM_PHILOSOPHERS; i++) {
Fork leftFork = forks[i];
Fork rightFork = forks[(i + 1) % NUM_PHILOSOPHERS];
// Um Deadlock zu vermeiden, greift der letzte Philosoph zuerst zur rechten Gabel.
if (i == NUM_PHILOSOPHERS - 1) {
philosophers[i] = new Philosopher(i, rightFork, leftFork);
} else {
philosophers[i] = new Philosopher(i, leftFork, rightFork);
}
new Thread(philosophers[i], "Philosopher-" + i).start();
}
}
}
class Fork {
private final int id;
private boolean inUse;
// Konstruktor
public Fork(int id) {
this.id = id;
this.inUse = false;
}
// Liefert die ID der Gabel zurück
public int getId() {
return id;
}
// Gabel aufnehmen
public synchronized boolean take() {
if (!inUse) {
inUse = true; // Gabel ist jetzt in Benutzung
try {
Thread.sleep(1000); // 1 Sekunde warten, um die Gabel aufzunehmen
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return true;
}
return false; // Gabel ist bereits in Benutzung
}
// Gabel freigeben
public synchronized void put() {
inUse = false; // Gabel freigeben
}
@Override
public String toString() {
return "Fork-" + id;
}
}
class Philosopher implements Runnable {
private final int id;
private final Fork leftFork;
private final Fork rightFork;
public Philosopher(int id, Fork leftFork, Fork rightFork) {
this.id = id;
this.leftFork = leftFork;
this.rightFork = rightFork;
}
@Override
public void run() {
try {
// Linke Gabel aufnehmen
System.out.println("Philosopher-" + id + " is trying to get " + leftFork);
while (!leftFork.take()) {
Thread.yield(); // Busy waiting entschärfen
}
System.out.println("Philosopher-" + id + " got " + leftFork);
// Rechte Gabel aufnehmen
System.out.println("Philosopher-" + id + " is trying to get " + rightFork);
while (!rightFork.take()) {
Thread.yield(); // Busy waiting entschärfen
}
System.out.println("Philosopher-" + id + " got " + rightFork);
// Philosoph isst
System.out.println("Philosopher-" + id + " is eating.");
Thread.sleep(2000); // 2 Sekunden essen
// Gabeln freigeben
leftFork.put();
System.out.println("Philosopher-" + id + " put down " + leftFork);
rightFork.put();
System.out.println("Philosopher-" + id + " put down " + rightFork);
// Philosoph beendet das Essen
System.out.println("Philosopher-" + id + " finished eating.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("Philosopher-" + id + " was interrupted.");
}
}
}

+ 48
- 0
praktkum3/DistributedSorterClient.java View File

@@ -0,0 +1,48 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class DistributedSorterClient {
public static void main(String[] args) {
new DistributedSorterClient().run();
}
private void run() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Enter a string to sort (or press Enter to quit): ");
String line = scanner.nextLine();
if (line.isEmpty()) break;
// Senden und Empfangen der sortierten Zeile
String sortedLine = sort(line);
if (sortedLine != null) {
System.out.println("Sorted: " + sortedLine);
} else {
System.out.println("Error communicating with server.");
}
}
scanner.close();
}
private String sort(String line) {
String response = "";
try (Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// Sende die Eingabezeile an den Server
out.println(line);
// Warte auf die Antwort des Servers
response = in.readLine();
} catch (Exception e) {
System.err.println("Error communicating with server: " + e.getMessage());
return null;
}
return response;
}
}

+ 73
- 0
praktkum3/DistributedSorterServer.java View File

@@ -0,0 +1,73 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
public class DistributedSorterServer implements Runnable {
private final Socket clientSocket;
// Konstruktor
public DistributedSorterServer(Socket clientSocket) {
this.clientSocket = clientSocket;
}
public static void main(String[] args) {
final int port = 12345;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Distributed Sorter Server is running on port " + port);
while (true) {
// Warten auf neue Verbindung
Socket client = serverSocket.accept();
System.out.println("New client connected: " + client.getInetAddress());
// Neuen Thread starten, um die Client-Anfrage zu bearbeiten
Thread thread = new Thread(new DistributedSorterServer(client));
thread.start();
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
@Override
public void run() {
try (
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)
) {
String inputLine;
// Verarbeite alle Nachrichten vom Client
while ((inputLine = in.readLine()) != null) {
System.out.println("Received: " + inputLine);
// Sortiere die Buchstaben im String
String sortedLine = sortCharacters(inputLine);
System.out.println(inputLine + " -> " + sortedLine);
// Antwort zurück an den Client senden
out.println(sortedLine);
}
} catch (Exception e) {
System.err.println("Error handling client: " + e.getMessage());
} finally {
try {
clientSocket.close();
System.out.println("Client disconnected.");
} catch (Exception e) {
System.err.println("Error closing client socket: " + e.getMessage());
}
}
}
// Sortiermethode für die Zeichen im String
private String sortCharacters(String input) {
char[] chars = input.toCharArray();
Arrays.sort(chars);
return new String(chars);
}
}

Loading…
Cancel
Save