Рассмотрим эту простую попытку для многопоточности, например:Thread wait() влияет на основной поток?
public class LetsMutexThreads {
public static Object MUTEX = new Object();
private static class Thread1 extends Thread {
public void run() {
synchronized (MUTEX)
{
System.out.println("I'm thread 1 , goint to take a nap...");
try
{
MUTEX.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("T1 : That's it , I'm done ...");
}
}
}
private static class Thread2 extends Thread {
public void run() {
synchronized (MUTEX)
{
System.out.println("Thread 2 : Let's rock N roll !");
System.out.println("Waking up my buddy T1 ...");
MUTEX.notify();
}
}
}
public static void main(String[] args)
{
Thread2 t2 = new Thread2();
Thread1 t1 = new Thread1();
t1.run();
t2.run();
}
}
Я пытаюсь позволить Thread1
идти спать с ожиданием, а затем пусть Thread2
использовать уведомит(), чтобы разбудить Thread1
, но он Безразлично У меня есть шанс.
Почему wait() из Thread1
влияет на основную тему от выполнения t2.run();
?
Пожалуйста, посмотрите вверх разница между run() и start() – Arkadiy
'Thread' является' Runnable' должна быть одной из самых глупых вещей в Java API. –
@MarkoTopolnik: Мои потоки не реализуют Runnable. – ron