Thread Important Objective Questions - Part 2


7 Given the following program, which statement is true?

public class MyClass extends Thread {
    static Object lock1 = new Object();
    static Object lock2 = new Object();

    static volatile int i1, i2, j1, j2, k1, k2;

    public void run() { while (true) { doit(); check(); } }

    void doit() {
        synchronized(lock1) { i1++; }
        j1++;
        synchronized(lock2) { k1++; k2++; }
        j2++;
        synchronized(lock1) { i2++; }
    }

    void check() {
        if (i1 != i2) System.out.println("i");
        if (j1 != j2) System.out.println("j");
        if (k1 != k2) System.out.println("k");
    }

    public static void main(String[] args) {
        new MyClass().start();
        new MyClass().start();
    }
}

Select the one correct answer.

The program will fail to compile.

One cannot be certain whether any of the letters i, j, and k will be printed during execution.

One can be certain that none of the letters i, j, and k will ever be printed during execution.

One can be certain that the letters i and k will never be printed during execution.

One can be certain that the letter k will never be printed during execution.


No comments:

Post a Comment