Ich verfolge diesen Code und ich versuche herauszufinden, was genau es tun soll. Ich kann es nicht auf IntelliJ laufen lassen. Die Option run ist ausgegraut, obwohl ich das Project SDK definiert habe. Aber ich möchte nur wissen, was der Code tun soll.Java Multithreading Beispiel Nachricht 100 Mal auf verschiedenen Threads drucken?
Ich lese gerade ein bisschen Theorie über Threads. Soll es jede Nachricht 100 Mal mit einem Zeitstempel auf verschiedenen Threads anzeigen? Und Runnable 4 ist ein Beispiel, wie man es mit einem Lambda richtig macht?
Hauptklasse
import java.util.Date;
import java.util.concurrent.*;
public class Example02
{
public static void main(String []args)
{
// create runnables
PrintMessageRunnable pmRunnable1 = new PrintMessageRunnable("Runnable 1");
PrintMessageRunnable pmRunnable2 = new PrintMessageRunnable("Runnable 2");
PrintMessageRunnable pmRunnable3 = new PrintMessageRunnable("Runnable 3");
// passing a runnable using Lambda notation
Runnable pmRunnable4 =() -> {
// this is the code inside the run method
String message = "Lambda Runnable";
int REPETITIONS = 100;
int DELAY = 100;
try {
for(int i = 1; i <= REPETITIONS; i++) {
Date now = new Date();
System.out.println(now + ": " + message + "." + i);
Thread.sleep(DELAY);
}
}
catch (InterruptedException e) {
System.out.println("Runnable version interrupted.");
}
};
// specify how many threads the executor service should manage
int MAX_THREADS = 2;
ExecutorService pool = Executors.newFixedThreadPool(MAX_THREADS);
// start running
pool.execute(pmRunnable1);
pool.execute(pmRunnable2);
pool.execute(pmRunnable3);
pool.execute(pmRunnable4);
}
}
drucken Nachricht Runnable Klasse
import java.util.*;
public class PrintMessageRunnable implements Runnable
{
private String message;
private int REPETITIONS = 100;
private int DELAY = 100;
public PrintMessageRunnable(String message){
this.message = message;
}
public void run(){
try {
for(int i = 1; i <= REPETITIONS; i++) {
Date now = new Date();
System.out.println(now + ": " + message + "." + i);
Thread.sleep(DELAY);
}
}
catch (InterruptedException e) {
System.out.println("Runnable version interrupted.");
}
}
}
Vielen Dank :) Ich habe gerade gelesen über Dinge mit Hilfe von Schlössern threadsafe. Ich gehe jetzt gleich durch Beispiele. – Torque
Eine einzelne "Date" -Instanz wird hier nie von mehr als einem Thread verwendet. Das ist also absolut sicher. – Henry
Wenn eine Objektinstanz NICHT von mehr als einem Thread verwendet wird, müssen Sie nicht wirklich über ThreadSafe nachdenken. – Alex