相关疑难解决方法(0)

Java同步方法锁定对象或方法?

如果我在同一个类中有2个同步方法,但每个方法访问不同的变量,那么2个线程可以同时访问这两个方法吗?锁是否发生在对象上,或者它是否与synchronized方法中的变量一样具体?

例:

class X {

    private int a;
    private int b;

    public synchronized void addA(){
        a++;
    }

    public synchronized void addB(){
        b++;
    }

}
Run Code Online (Sandbox Code Playgroud)

2个线程可以同时访问同一个X类实例x.addA()x.addB()吗?

java multithreading locking synchronized thread-safety

176
推荐指数
6
解决办法
16万
查看次数

java monitor是否包含实例变量?

是java中的监视器不限制对实例变量的访问,而只限制对同步语句中声明为synchronized的方法或代码的访问?

我创建了两个线程,thread y调用sync方法,该方法在sync()调用未声明同步的unsync方法时声明为synchronized.两者都在共享对象上调用方法thread r.

unsync()能够修改对象的实例变量,s同时该对象的监视器或锁仍然被持有Thread r.

是Java中的监视器不限制对实例变量的访问,并且只限制声明为synchronized的方法或同步语句中的代码?

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 …
Run Code Online (Sandbox Code Playgroud)

java synchronized

19
推荐指数
1
解决办法
8856
查看次数