上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页
摘要: 原因 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁 代码 public class DeadLockDemo { p 阅读全文
posted @ 2020-06-19 15:35 叮叮叮叮叮叮当 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 原始结构 synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,wait/notify 等方法也是依赖 monitor 对象,只有在同步块或方法中才能调用 wait/notify 等方法 阅读全文
posted @ 2020-06-19 14:39 叮叮叮叮叮叮当 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 概念 首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示: 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞 核心方法 抛异常:如果操作不能马上进行,则抛出异常 特定的值:如果操作不能马上进行,将会返回一个特殊的值,一般是 tru 阅读全文
posted @ 2020-06-18 10:29 叮叮叮叮叮叮当 阅读(226) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调用 countDown 方法会将计数减一(调用 countDown 方法的线程不会堵塞),当计数其值 阅读全文
posted @ 2020-06-18 09:56 叮叮叮叮叮叮当 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 适用性 缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地, 阅读全文
posted @ 2020-06-17 17:41 叮叮叮叮叮叮当 阅读(1606) 评论(0) 推荐(0) 编辑
摘要: 公平和非公平锁 公平锁:是指多个线程按照申请的顺序来获取值。在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以后会按照 FIFO 的规则获取锁 非公平锁:是指多个线程获取值的顺序并不是按照申请锁的顺序,有可能后 阅读全文
posted @ 2020-06-17 15:13 叮叮叮叮叮叮当 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 写入时复制(CopyOnWrite) 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调用者(Callers)同时要求相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源内容时 阅读全文
posted @ 2020-06-17 14:22 叮叮叮叮叮叮当 阅读(307) 评论(0) 推荐(0) 编辑
摘要: ArrayList的线程安全故障 /** * 发现报java.util.ConcurrentModificationException */ public class ContainerDemo { public static void main(String[] args) { List<Inte 阅读全文
posted @ 2020-06-17 11:08 叮叮叮叮叮叮当 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 原子引用 public class AtomicReferenceDemo { public static void main(String[] args) { User cuzz = new User("cuzz", 18); User faker = new User("faker", 20); 阅读全文
posted @ 2020-06-17 10:58 叮叮叮叮叮叮当 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 原子类使用 public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(666); // 获取真实值,并替换为相应的值 boolean 阅读全文
posted @ 2020-06-17 10:49 叮叮叮叮叮叮当 阅读(254) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页