里面有一个同步块的静态方法,在Java中阻塞整个类?

时间:2018-09-11 17:38:53

标签: java synchronized java-threads

我有一个执行3个线程的类,在我询问的每个线程上检查全局变量。我试图分别锁定每个变量,我不想每次更改一个变量时都阻塞整个类。我研究了一下,但仍然感到困惑。 在这种情况下,因为我必须从每个线程访问变量,所以必须使方法静态,所以我的问题是:每次调用getter和setter时,我是阻塞每个变量还是整个类?

 public class MyClass {
    private static boolean bool1= false;
    private static boolean bool2= false;


    public static void main(String[] args) {

        //run Thread1
        //run Thread2
        //run thread3
    }


    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static boolean isBool1() {
        synchronized(lock1) {
            return bool1;
        }
    }

    public static void setBool1(boolean bool) {
        synchronized(lock1) {
            MyClass.bool1= bool1;
        }
    }


    public static boolean isBool2() {
        synchronized(lock2) {
            return bool2;
        }
    }

    public static void setBool2(boolean bool2) {
        synchronized(lock2) {
            MyClass.bool2= bool2;
        }
    }

}

0 个答案:

没有答案