我想實現死鎖條件,但不知何故我無法讓它工作。線程Thread1和Thread2都進入運行功能,但只有其中一個進入Sub/Sum取決於誰先進入運行。例如:如果Thread2輸入先運行,它將調用sub(),而Thread1從不調用sum()。我還增加了睡眠時間,以便在調用sum()之前讓Thread2休眠,並且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