Я пытаюсь выполнить условие взаимоблокировки, но каким-то образом я не могу заставить его работать. Оба потока Thread1 и Thread2 входят в функцию run, но только один из них входит в Sub/Sum в зависимости от того, кто первым запустил run. Пример: если Thread2 вступил в первый запуск, он будет вызывать sub(), а Thread1 никогда не вызывает sum(). Я также добавил время сна, так что Thread2 спит перед вызовом sum(), и Thread1 получает достаточно времени для ввода Sum(), но Thread1 никогда не входит.Выполнение условия взаимоблокировки
public class ExploringThreads {
public static void main(String[] args) {
// TODO Auto-generated method stub
threadexample a1 = new threadexample();
Thread t1 = new Thread(a1, "Thread1");
Thread t2 = new Thread(a1,"Thread2");
t1.start();
t2.start();
}
}
class threadexample implements Runnable{
public int a = 10;
public void run(){
if(Thread.currentThread().getName().equals("Thread1"))
sum();
else if(Thread.currentThread().getName().equals("Thread2"))
sub();
}
public synchronized void sum()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"In Sum");
sub();
}
public synchronized void sub()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"In Sub");
sum();
}
}
Извините, но Я не понимаю. Это может быть потому, что я новичок в потоковом режиме. По моему пониманию, я сделал только один объект класса threadexample. и Thread1 и Thread2 конкурируют за приобретение блокировки по sum() и sub(). – Bhaskar