Bom dia todos,
Estou com mais uma dúvida sobre Threads…
public class TwoThreads2 {
private static Object resource = new Object();
private static void delay(long n) {
try {
Thread.sleep(n);
} catch (Exception e) {
System.out.print("Error ");
}
}
public static void main(String[] args) {
System.out.print("StartMain ");
new Thread1().start();
delay(1000);
Thread t2 = new Thread2();
t2.start();
delay(1000);
t2.interrupt();
delay(1000);
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 ");
}
}
}
}
/*
Assume that sleep(n) executes in exactly m milliseconds, and all other
code executes in an insignificant amount of time. What is the output if
the main() method is run?
A. Compilation fails.
B. Deadlock occurs.
C. StartMain Start1 Error EndMain End1
D. StartMain Start1 EndMain End1 Start2 End2
E. StartMain Start1 Error Start2 EndMain End2 End1
F. StartMain Start1 Start2 Error End2 EndMain End1
G. StartMain Start1 EndMain End1 Start2 Error End2
*/
A resposta é a letra G. Porque não pode ser tbm a letra a F???
Executei o código e realmente deu isso… agora a minha dúvida é, se isso sempre vai acontecer? Não há outra possibilidade?
Outra dúvida é a respeito do método t2.interrupt(), no livro K&B é dito que o mesmo não cai… Afinal ele cai ou não?
Desde já agradeço
–
Diego