首页 理论教育 Java服务端研发:锁及使用方式

Java服务端研发:锁及使用方式

时间:2023-11-22 理论教育 版权反馈
【摘要】:在现实世界中锁住某些东西表示独占或者使用中,程序中的锁也是同样的意义。此实例还包含其他几种加锁的方式,例如使用tryLock方法。对于同步代码块或者锁的使用一定要精简,在确定会发生异步问题的地方才加入同步的逻辑,否则乱上锁会造成很大的性能问题,多线程的优势也得不到发挥。另外,被锁住的代码也要精简,不要把冗余的可以异步执行的代码放到同步代码块中。

Java服务端研发:锁及使用方式

在现实世界中锁住某些东西表示独占或者使用中,程序中的锁也是同样的意义。对于多个线程同时访问的单一资源,当前获得执行权限的线程可以把这个资源锁住,执行完毕再把锁打开。下面介绍几种简单的程序加锁方式。

(1)Synchronized关键字

对上面的任务单元进行修改,改为如下内容,则程序运算可以输出正确的答案。

Synchronized关键字把这个方法设置为同步方法,当有多个线程希望使用此方法时,此关键字只允许一个线程占用此方法,其他线程处于等待状态,先入线程执行完毕其他线程再分别单独抢占此方法。(www.xing528.com)

(2)Lock

可以在这个对象中创建一个ReentrantLock的实例,对需要加锁的代码段的前面调用lock方法上锁,执行完毕调用unlock方法解锁。这样也可以避免其他线程抢占此公共资源。此实例还包含其他几种加锁的方式,例如使用tryLock方法。lock方法和tryLock方法的区别是tryLock可以设置立刻返回或者等待一段时间再返回。

常用的锁还有读写锁ReentrantReadWriteLock,这里不再介绍,希望大家自己完成读写锁的学习。对于同步代码块或者锁的使用一定要精简,在确定会发生异步问题的地方才加入同步的逻辑,否则乱上锁会造成很大的性能问题,多线程的优势也得不到发挥。另外,被锁住的代码也要精简,不要把冗余的可以异步执行的代码放到同步代码块中。本节对于并发的意义以及并发会导致的问题通过几个例子都已经讲到了,希望读者能够很好地理解并且使用多线程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈