并发编程学习小记

来源:互联网 发布:seo白帽与黑帽 编辑:程序博客网 时间:2024/06/04 18:35

JAVA并发学习小记


临界区:产生竞态条件的代码区域。

阻塞:同步块,wait()均会造成线程阻塞。

悲观锁:使用阻塞的方式防止其他线程写入正在被读或在写的数据。试图修改该数据的线程将阻塞等待至正在写入的线程的写入操作完成。

乐观锁:不管如何,先尝试修改数据,如果在写入时发现数据已经被改变则返回操作失败,否则直接写入修改的数据。与悲观锁不同在于并没有阻塞线程。

饥饿:同步块、notify()、notifyAll()是随机唤醒阻塞线程的,RP不好有些线程将一直无法唤醒,造成线程饥饿。

公平锁:仅使用同步块与wait(),notify(),notifyAll()实现的锁在释放锁时会随机唤醒正在阻塞等待的线程,有可能会造成饥饿现象。公平锁会给与所有等待线程同等的机会(并非随机,通常按一定顺序)唤醒并继续获得锁。

重入:继续获得已经持有的锁称为重入。

可重入锁:如果当前线程已经持有该锁,则可以继续再次持有该锁。

不可重入锁:锁只能被持有一次,不能被重复持有。

死锁:多个线程互相等待彼此来释放锁,但同时又持有其他线程所需要的锁。

活锁:非阻塞算法可能产生的情况,多个线程请求执行更改均失败并重复请求。

0 0