java 框架根据锁机制解决锁竞争难题,包含 synchronized 块和 lock 插口。锁竞争解决对策包含等候/通告、超时和公平锁。实际实战中,可使用 reentrantlock 锁维护共享资源,防止竞争条件。
zvvq好,好zvvq
Java 架构怎样处理并行计算里的锁竞争难题?
zvvq
在并行计算中,锁竞争可能造成死锁、性能下降和不恰当程序运行。为了防止各种问题,Java 架构提供了各种体制去处理锁竞争。 zvvq好,好zvvq
锁机制
内容来自zvvq,别采集哟
一个锁是一种同步机制,它允许只有一个进程同时访问共享资源。Java 带来了二种主要的锁机制:
内容来自samhan666
synchronized 块:应用 synchronized 关键词将块里的编码标记为临界区。该块里的编码每次只能由一个进程实行。 Lock 插口:Lock 插口带来了更灵活的锁操作,比如重入锁和公平锁。锁竞争解决 本文来自zvvq
当多个线程竞争同一锁时,架构会用下列对策之一去处理竞争: zvvq.cn
等候/通告:当一个进程获得锁失败时,这将等候被唤醒。当锁被释放时,等待的进程将被唤醒。 超时:进程能够等待锁时指定一个超时时间。假如超时时间期满,进程将舍弃等候并执行。 公平锁:公平锁保证进程以要求次序获得锁,从而防止挨饿死锁。实战案例 :
本文来自zvvq
考虑一个有多个线程访问共享序列的现象。为了避免竞争条件,我们可以使用下列编码:
importjava.util.concurrent.locks.ReentrantLock; zvvq好,好zvvq
importjava.util.concurrent.BlockingQueue; zvvq.cn
publicclassSharedQueue{ 内容来自zvvq
privateBlockingQueuequeue;
copyright zvvq
privateReentrantLock lock =newReentrantLock(); 内容来自zvvq,别采集哟
publicvoidput(Objectobject){
lock.lock(); copyright zvvq
try{
zvvq.cn
queue.put(object);
}finally{
lock.unlock();
}
}
publicObject take() {
lock.lock();
try{
内容来自zvvq
returnqueue.take();
内容来自zvvq
}finally{
本文来自zvvq
lock.unlock(); 内容来自zvvq
} 内容来自samhan
}
} 本文来自zvvq
在这个示例中,我们使用 ReentrantLock 来保护队列的 put() 和 take() 方式。当进程尝试浏览序列时,他会获得锁。假如锁被另一个进程拥有,进程将进入等候情况,直至锁被释放。 copyright zvvq
以上就是Java架构怎样处理并行计算里的锁竞争难题?的详细内容,大量请关注其他类似文章! zvvq好,好zvvq