synchronized的用法有哪些?synchronized使用方法详解

TheDisguiser 2020-06-06 13:16:39 java常见问答 3639

相信经过上篇文章,小伙伴们对Synchronized已经有了不少自己的理解了吧,那你们知道它该如何用代码实现吗?这次就让我们一起来了解了解吧。

Synchronized基本概念

Synchronized是java中锁机制的核心关键字,它是为加锁而生的,使用这个关键字,就代表这你想要为这个方法或对象加上一把锁。在它锁定一个方法又或是锁定一个代码块的时候,同一个时刻,至多只能有一个线程在执行这一段代码。

当两个并发线程对同一个对象object当中的这个加锁同步代码块进行访问的时候,同一时间内,只能够有一个线程得到执行。

Synchronized用法

Synchronized包含两种用法,分别是synchronized方法和synchronized块。

1.同步代码块

1) 、this,指当前类对象

synchronized(this){
.....
}

2)、 作用于配置的实例对象

public Object obj = new Object();
synchronized(obj){
.....
}
String lock =" ";
synchronized(lock){
.....
}

3)、类对象

synchronized(TestClass.class){
.....
}

2. 同步方法

classArrayWithLockOrder
{
    private static long num_locks = 0;
    private long lock_order;
    private int[] arr;
    public ArrayWithLockOrder(int[] a)
    {
        arr = a;
        synchronized(ArrayWithLockOrder.class)
        { //-----这里
            num_locks++; //锁数加1。
            lock_order = num_locks; //为此对象实例设置唯一的lock_order。
        }
    }
    publiclonglockOrder()
    {
        returnlock_order;
    }
    public int[] array()
    {
        return arr;
    }
}
class SomeClass implements Runnable
{
    public int sumArrays(ArrayWithLockOrdera1, ArrayWithLockOrdera2)
    {
        intvalue = 0;
        ArrayWithLockOrderfirst = a1; //保留数组引用的一个
        ArrayWithLockOrderlast = a2; //本地副本。
        intsize = a1.array()
            .length;
        if (size == a2.array()
            .length)
        {
            if (a1.lockOrder() > a2.lockOrder())
            { //确定并设置对象的锁定顺序。
                first = a2;
                last = a1;
            }
            synchronized(first)
            { //按正确的顺序锁定对象。
                synchronized(last)
                {
                    int[] arr1 = a1.array();
                    int[] arr2 = a2.array();
                    for (int i = 0; i < size; i++)
                        value += arr1[i] + arr2[i];
                }
            }
        }
        return value;
    }
    public void run()
    {
        //
    }
}

以上就是关于synchronized的用法的所有内容了,如果小伙伴们还需要了解更多相关java架构师知识就快来关注我们的网站吧。

推荐阅读:

synchronized意思是什么?是什么意思?

synchronized和lock区别有哪些?要如何实现?

sychronized和reentrantlock区别在哪里?都有什么用处?