美文网首页
线程同步

线程同步

作者: 12313凯皇 | 来源:发表于2019-04-13 09:37 被阅读0次

    首先,第一个想到的是synchroniized关键字,它主要有以下几种用法:

    总结
    JVM层面实现的。
    在对象锁可以通过对非静态方法使用synchronized或者代码块synchronized(this){}。其次就是,当某进程获取到了对象锁后,该对象的其他同步方法也是锁定的,但不影响非同步方法的调用。这个可以在上面的参考文章中找到示例,这里就不再展示了。
    当资源竞争不是很激烈的情况下synchronized性能优于ReentrantLock。资源竞争很激烈时,synchronized的性能会下降几十倍。

    类锁可以通过对静态方法使用synchronized或者代码块synchronized(xx.class){}。其机制与对象锁是一致的,不过对象锁和类锁又是相互独立的,这个也可以在上面的参考文章中找出对应的实例去验证。

    除了synchroniized,还有Lock也可以实现线程同步,LockJava 1.6被引入进来的,Lock的引入让锁有了可操作性。使我们可以在需要的时候去手动的获取锁和释放锁,甚至我们还可以中断获取以及超时获取的同步特性,但是它在使用上没有synchroniized方便快捷。

    Lock是一个接口(JDK 1.6引入),我们常用的实现类有ReentrantLock(可重入锁)、ReadLockWriteLock,最常用的还是ReentrantLock

    总结:lock如果拿不到锁(对象锁)就会一致处于等待状态,直到拿到锁,tryLock如果拿不到锁则会返回false停止等待。tryLock有一个重载方法:tryLock(long timeout, TimeUnit unit)。注意记得在finallyunLock(),手动释放锁。

    有关两种方式的示例:5个步骤,教你瞬间明白线程和线程安全

    相关文章

      网友评论

          本文标题:线程同步

          本文链接:https://www.haomeiwen.com/subject/tjzkwqtx.html