Das Interface Runnable (alternativ Callable) definiert die Methode run(). Darin wird der parallel auszuführende Code definiert.

public class MyClass implements Runnable {
	@Override
	public void run() {
		// Diese Methode wird dann vom neu erstellten Thread ausgeführt
	}
}
 
public class Main {
    public static void main(String[] args) {
    
	    // So wird der Thread dann gestartet
	    // Dies kann von überall aus passieren
		Thread meinThread = new Thread(new MyClass());
		meinThread.start();
	}
}

Verkürzte Schreibweise

Analog kann man auch direkt von der Klasse Thread erben und darin die Methode run() überschreiben.

public class MyClass extends Thread {
	@Override
	public void run() {
		// Diese Methode wird dann vom neu erstellten Thread ausgeführt
	}
}
 
public class Main {
    public static void main(String[] args) {
    
	    // thread starten
		MyClass meinThread = new MyClass();
		meinThread.start();
	}
}

Beispiel

Runnable task = () -> IntStream.range(1, 4)
	.mapToObj(i -> i + " ")
	.forEach(System.out::print);
 
new Thread(task).start();
new Thread(task).start();
new Thread(task).start();

Ausgabe:

1 1 1 2 2 3 2 3 3