Can anyone help me to solve the following problem?
public class Starter extends Thread{
private int x=2;
public static void main(String[] args) throws Exception{
new Starter().makeItSo();
}
public Starter(){
x=5;
start();
}
public void makeItSo() throws Exception {
join();
x=x-1;
System.out.println(x);
}
public void run(){x*=2;}
}
A. 4
B. 5
C. 8
D. 9
E. Compilation failure
F. An exception is thrown at runtime
G. It is impossible to determine for certain
In the dump the answer is D. I know that a new thread is created in new Starter().makeItSo. But can anyone tell me why the x*=2 in run() execute between x=x-1 and System.out.println(x) in method makeItSo?