多线程(二)Synchronize

2022-03-20  本文已影响0人  心無旁騖丶

概念

synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。

锁机制有如下两种特性:

public class Sync1 implements Runnable {
    private int count = 10;
    private Object o = new Object();

    @Override
    public void run() {
        //锁定某个对象,拿到锁才可以执行下面代码
        synchronized (o) {
            count--;
            System.out.println(Thread.currentThread().getName() + "count = " + count);
        }
    }

    public static void main(String[] args) {
        Sync1 sync1 = new Sync1();
        for (int i = 0; i < 10; i++) {
            new Thread(sync1, "Thread" + i).start();
        }
    }
}

Synchronized锁升级

在没有实际竞争的情况下,在Mark Word中CAS记录owner,形成偏向锁
如果有线程争用的情况下,会升级为自旋锁,在自旋的同时重新竞争锁。
在经历了一定次数的自旋后(默认为10次),升级为重量级锁,这种同步方式的成本非常高,包括系统调用引起的内核态与用户态切换、线程阻塞造成的线程切换等。

上一篇下一篇

猜你喜欢

热点阅读