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