摘要:
synchronized是在 JVM 层面上实现的,内部实现依次是偏向锁 轻量级锁、重量级锁。在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会 阅读全文
摘要:
1.通知等待模式 等待方遵循如下原则。 1.通知等待模式 等待方遵循如下原则。 获取对象的锁。 如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。 条件满足则执行对应的逻辑。 对应的伪代码如下。 synchronized(对象) { while(条件不满足) { 对象.wait( 阅读全文
摘要:
1.ConcurrentHashMap 1.1为什么要使用ConcurrentHashMap hashMap是线程不安全的,而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。 (1)线程不安全的HashMap 在多线程环境下,使用 阅读全文
摘要:
在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic包里的类基本都是使用Unsafe实现的包装类。 1.原子更新基本类型, Atomic包提供了以下3个类。·AtomicBoolean AtomicI 阅读全文
摘要:
在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。 1等待多线程完成的CountDownLatch CountDownLatch 阅读全文
摘要:
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatil 阅读全文
摘要:
一. 线程状态类型 1. 新建状态(New):新创建了一个线程对象。 2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 3. 运行状态(Running):就绪状态的线程获取了CPU,执行 阅读全文
摘要:
1. JMM内存模型作用 描述线程本地内存和主内存之间的抽象关系。线程A和线程B之间通讯,需要通过主内存。 2.happens-before简介 在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程 阅读全文
摘要:
有锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 volatile是不错的机制,但是volat 阅读全文
摘要:
参考 http://www.infoq.com/cn/articles/netty-high-performance 1. 传统 RPC 调用性能差的三宗罪 1)网络传输方式问题 2)序列化方式问题 3)线程模型问题 2.高性能的三个主题 1) IO模型:用什么样的通道将数据发送给对方,BIO、NI 阅读全文