
正文
关于10行代码理解java锁的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
说说java锁有哪些种类,以及区别
1、独享锁/共享锁 独享锁是指该锁一次只能被一个线程所持有。共享锁是指该锁可被多个线程所持有。对于Java ReentrantLock而言,其是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁。
2、常用的synchronized是悲观锁,lock是乐观锁。
3、类锁 由上述同步静态方法引申出一个概念,那就是类锁。其实系统中并不存在什么类锁。
4、ReentrantLock 锁有好几种,除了常用的lock ,tryLock ,其中有个lockInterruptibly 。先把API粘贴上来 lockpublic void lock()获取锁。如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1。
5、synchronized和lock性能区别 synchronized是托管给JVM执行的,而lock是java写的控制锁的代码。在Java5中,synchronize是性能低效的。
相关问答
Q1: 帮忙解释一下java中类的notify的含义,多谢了
1、首先从名字可以了解,notify是通知一个线程获取锁,notifyAll是通知所有相关的线程去竞争锁。notify不能保证获得锁的线程,真正需要锁,并且可能产生死锁。
2、notify(),notifyAll()都是要唤醒正在等待的线程,前者明确唤醒一个,后者唤醒全部。
3、condition = true;obj.notify();} 需要注意的概念是:◆调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) {……} 代码段内。
4、使用notify(),在众多等待同一个锁的任务中只有一个会被唤醒,因此如果你希望使用notify(),就必须保证被唤醒的是恰当的任务。notify()也就是this.notify(),唤醒所有争抢自己的线程,与别的对象产生的wait()没有关系。
Q2: java的死锁是什么,如何避免死锁
1、什么是死锁,如何避免死锁?线程A需要资源X,而线程B需要资源Y,而双方都掌握有对方所要的资源,这种情况称为死锁(deadlock),或死亡拥抱(thedeadlyembrace)。
2、死锁避免:通过合理的资源分配策略确保系统始终处于安全状态,如:银行家算法。死锁检测及恢复:在系统运行过程中检测死锁,发现死锁后采取措施恢复,如:撤销进程、逐步剥夺资源等。
3、避免饥饿:为了避免死锁导致的饥饿问题,可以采用请求和保持算法来保证资源的分配公平性,使得每个进程都有机会获得所需的资源。破坏死锁:破坏死锁是指通过强制性的措施来破坏死锁的条件,从而解除死锁。
Q3: 请问java中的lock和synchronized区别是什么?
synchronized:在需要同步的对象中加入此控制,synchronized在方法上,也在特定代码块中,括号中表示需要锁的对象。lock:需要显示指定起始位置和终止位置。
首先synchronized是java内置关键字,在jvm层面,Lock是个java类。synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁。
lock和synchronized区别: Lock是一个接口,而synchronized是Java中的关键字,Lock需要通过lock()和unlock()方法显式实现加锁和释放锁,而synchronized不需要。 Lock可以提高多个线程进行读写操作的效率。
ReentrantLock提供了可轮询的锁请求,他可以尝试的去取得锁,如果取得成功则继续处理,取得不成功,可以等下次运行的时候处理,所以不容易产生死锁,而synchronized则一旦进入锁请求要么成功,要么一直阻塞,所以更容易产生死锁。
主要相同点:Lock能完成synchronized所实现的所有功能 不同:ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性。
关于10行代码理解java锁和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







