java多线程-synchronized的缺陷

synchronized关键字可以用来同步方法和代码块,保证在同一时间只有一个线程能访问被同步的代码。但是其有两个缺点:

1.无法控制阻塞时长

2.阻塞不可中断

 public synchronized void syncMethod(){
        try {
            TimeUnit.HOURS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        SynchronizedDefect defect = new SynchronizedDefect();
        Thread t1 = new Thread(defect::syncMethod,"t1");
        t1.start();
        TimeUnit.SECONDS.sleep(2);
        Thread t2 = new Thread(defect::syncMethod,"t2");
        t2.start();
        TimeUnit.SECONDS.sleep(2);
        t2.interrupt();
        System.out.println(t2.isInterrupted());
        System.out.println(t2.getState());
    }

运行结果: 

true
BLOCked

 

 

 

你可能感兴趣的:(工作及学习的一些总结)