public class TwoThreads {
private static Object resource = new Object();
private static void delay(long n) {
try
{
Thread.sleep(n);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.print("StartMain ");
new Thread1().start();
delay(1000); //dealay 1
Thread t2 = new Thread2();
t2.start();
delay(1000); // delay 2
t2.interrupt(); //here its throwing exception
delay(1000); //delay 3
System.out.print("EndMain ");
}
static class Thread1 extends Thread {
public void run() {
synchronized (resource) {
System.out.print("Startl ");
delay(6000);
System.out.print("End1 ");
}
}
}
static class Thread2 extends Thread {
public void run() {
synchronized (resource) {
System.out.print("Start2 ");
delay(2000);
System.out.print("End2 ");
}
}
}
}
我剛到這兒困惑,爲什麼t2.interrupt()
沒有拋出異常,當T2正在等待獲取資源對象和interrupt()
方法上的鎖可能會引發安全異常,那麼爲什麼編譯器還允許我們不把它變成try catch塊執行。爲什麼在這裏拋出異常異常......原因?
你的問題還不清楚:你的代碼中的註釋表示拋出了一個異常,但是你的代碼下面的文本顯示沒有拋出異常。而關於安全異常的部分也不是很清楚...... – assylias
是的,它是拋出中斷異常,關於安全異常,這是另一個問題。 – Sunny