Hallo,
ich bin zwar kein Java-Neuling, bräuchte aber dennoch etwas Unterstützung für mein Problem:
Ich möchte in meinem Programm einen Thread so lange anhalten, bis ein anderer an einem Semaphore angekommen ist. Der Code dazu sieht ungefähr folgendermaßen aus:
Gerne würde ich Konstrukt mit dem Thread.Sleep(1) irgendwie besser hinkriegen, denn der wartende Thread soll "schnellstmöglich" weiterlaufen, sobald der andere Thread am Semaphore angekommen ist. Nur wir schafft man das ohne "busy waiting"?
Ich habe mir auch schon überlegt, den Hauptthread auf einem weiteren Semaphore warten zu lassen, den der andere Thread vor Erreichen der eigentlichen Semaphores setzt. Nur dann ist immer noch nicht 100% sicher, dass der gestartete Thread tatsächlich am Semaphore steht.
Freue mich über interessante Antworten!
Viele Grüße,
Markus
ich bin zwar kein Java-Neuling, bräuchte aber dennoch etwas Unterstützung für mein Problem:
Ich möchte in meinem Programm einen Thread so lange anhalten, bis ein anderer an einem Semaphore angekommen ist. Der Code dazu sieht ungefähr folgendermaßen aus:
Java:
public static void main(String[] args) throws Exception
{
final Semaphore s = new Semaphore(0);
Thread t = new Thread(new Runnable()
{
public void run()
{
// dies soll der Punkt sein, an dem der Thread "fertig" ist
s.tryAcquire();
// ...Programmlogik
}
});
t.start();
// dieses Konstrukt ist sehr unschön, wie geht das besser?
while(!s.hasQueuedThreads())
{
Thread.sleep(1);
}
}
Gerne würde ich Konstrukt mit dem Thread.Sleep(1) irgendwie besser hinkriegen, denn der wartende Thread soll "schnellstmöglich" weiterlaufen, sobald der andere Thread am Semaphore angekommen ist. Nur wir schafft man das ohne "busy waiting"?
Ich habe mir auch schon überlegt, den Hauptthread auf einem weiteren Semaphore warten zu lassen, den der andere Thread vor Erreichen der eigentlichen Semaphores setzt. Nur dann ist immer noch nicht 100% sicher, dass der gestartete Thread tatsächlich am Semaphore steht.
Freue mich über interessante Antworten!
Viele Grüße,
Markus