Thread mit LockSupport anhalten und wieder weiterlaufen lassen

Thomas Darimont

Erfahrenes Mitglied
Hallo,

hier mal ein kleines Beispiel zur Verwendung der Klasse LockSupport in dem wir einen Thread schlafen legen und von einem anderen Thread wieder aufwecken lassen.

Eine Besonderheit bei diesem Ansatz ist, dass die Methoden LockSupport#park(..) und LockSupport#unpark(..) man keine CheckedExceptions werfen... im Gegensatz zu bzw. dem Gespann aus Object#wait() Object#notify().

Java:
package de.tutorials.training;


import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;


public class WakeupSleepingThreadExample {


    public static void main(String[] args) throws Exception{


        Thread t1 = new Thread("T1"){
            @Override
            public void run() {


                System.out.println(getName() +" about to sleep");


                LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(30));


                System.out.println(getName() +" woke up");
            }
        };


        t1.start();


        TimeUnit.SECONDS.sleep(3);


        System.out.println(Thread.currentThread().getName() +" waking up " + t1.getName());
        LockSupport.unpark(t1);
    }
}

Gruß Tom
 
Zurück