旧·时光 | Time

Something that stays in your mind will someday spring up in your life.

用 Wait 和 Notify 实现 “生产者-消费者” 模型

在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理

写在前面 在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者,中间的仓库可以抽象成任何缓冲区类型的存储介质。 那么这种模型有什么优点呢?第一是解耦,可以将生产者和消费者分隔开,耦合度降低;二是支持并发,生产者把制造出来的数据往缓冲区一丢,就可以...

Java 中的 Wait 和 Notify 机制

Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到

写在前面 Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到。大家或多或少知道些背景知识,例如二者均为 Object 类的方法,而不是 Thread 特有的(因为锁是每个对象都具有的特性,因此操作锁的方法也紧跟对象,没毛病),且都只能在同步代码块中调用(即前提是先获得对象的监视器锁,一般来说在 synchronized 代码块中使用),否则抛出异常 I...

缓存架构的设计和常见问题

缓存架构的设计 缓存层通常架设在 DB 和业务逻辑层之间,核心功能就是从DB生成一条缓存数据,可以在后续若干次查询请求过程中不再访问DB,请求在缓存层直接命中后返回,从而可以达到加快访问速度的作用,同时也能在流量暴增时充当保护层防止DB被打垮。 缓存的引入虽然有优势,但也会带来一些问题,例如缓存穿透、缓存雪崩等,所以哪些场景适合使用缓存需要斟酌。读多写少的场景是很适合的,可以显著降低 D...

回顾《深入理解 Java 虚拟机》之线程安全与锁优化

最后一篇

什么叫线程安全 我之前面试的时候就被问到过这个问题,其实说几句话描述下线程安全估计谁都能做到,问题是如何下一个准确的定义呢?书中选取了 Brain Goetz 的定义: 当多线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的 通俗...

回顾《深入理解 Java 虚拟机》之 Java 和线程

第六篇

首先,并发不一定要依赖多线程,例如 PHP 中可以存在多进程并发。但是当我们在 Java 里面谈论并发时,一般都与线程脱不了干系,因此我们先来谈谈什么是线程,它跟进程有什么区别。 再谈进程与线程 如果一个服务器同时只能为一个客户端连接服务,其他都需要阻塞,那么效率定然会很感人,为了让服务器能同时服务更多的客户端连接,会经常应用并发编程。而实现并发的手段有多进程、多线程、IO 多路复用等。...