相信经过上篇文章,小伙伴们对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架构师知识就快来关注我们的网站吧。
推荐阅读: