Включает ли Java-монитор переменные экземпляра?

Это то, что монитор в Java не ограничивает доступ к переменным экземпляра и только к методам, которые объявлены как синхронизированные или код в синхронизированных операторах?

Я создал две темы,thread y вызывает метод синхронизации, который объявлен как синхронизированныйthread r вызывает метод unsync, который не объявлен синхронизированным. Оба вызывают методы для общего объекта.s

Thread r может изменить переменную экземпляра объектаs в то время как монитор или блокировка этого объекта все еще удерживаются.thread y

Это то, что монитор в Java не ограничивает доступ к переменным экземпляра, а только к методам, которые объявлены синхронизированными или кодируются в синхронизированных операторах?

public class stuff {

    private int a = 10;

    public synchronized void sync() {
        long t1 = System.currentTimeMillis();
        System.out
                .println("Okay, I am in sync method. I will be waiting for 10 seconds. Current Time = "
                        + System.currentTimeMillis());
        while (System.currentTimeMillis() - t1 < 10000);
        System.out
                .println("Okay, I have waited for 10 seconds. Current time is "
                        + System.currentTimeMillis()
                        + ".Now I will exit from sync method, a= " + this.a);
    }

    public void unsync() {
        System.out
                .println("Alright, I am in unsync method the currrent time is "
                        + System.currentTimeMillis());
        this.a = this.a + 1;
        System.out.println("The time of exit from unsync method is "
                + System.currentTimeMillis());

    }
}

class t1 extends Thread {
    stuff s;

    public t1(stuff s) {
        this.s = s;
    }

    public void run() {
        s.sync();
    }
}

class t2 extends Thread {
    stuff s;

    public t2(stuff s) {
        this.s = s;
    }

    public void run() {
        s.unsync();
    }
}

class m {
    public static void main(String args[]) throws Exception {
        stuff s = new stuff();
        t1 y = new t1(s);
        t2 r = new t2(s);
        y.start();
        Thread.sleep(2000);
        r.start();
    }
}

Вывод программы ниже:

Okay, I am in sync method. I will be waiting for 10 seconds. Current Time = 1358801766310
Alright, I am in unsync method the currrent time is 1358801768343
The time of exit from unsync method is 1358801768343
Okay, I have waited for 10 seconds. Current time is 1358801776310.Now I will exit from sync method,
a= 11

Ответы на вопрос(3)

Ваш ответ на вопрос