随笔分类 - Java编发编程
摘要:1. JMM的设计 设计者在设计JMM时,主要考虑两个关键因素。 **程序员对内存模型的使用。**程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。 编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化来提高性能。
阅读全文
摘要:2.1 什么是锁 Java中的每一个对象都可以作为锁。具体表现为以下3种形式: 对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前类的 Class对象 对于同步方法块,锁是 Synchonized括号里配置的对象。 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须
阅读全文
摘要:1. volatile 1.1 volatile的定义 **定义:**Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了 volatile,在某些情况下比锁要更加方便。如果一个字段被声明成 volatile,Java
阅读全文
摘要:避免一个线程同时获取多个锁。 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。 尝试使用定时锁,使用 lock.tryLock(timeout)来替代使用内部锁机制。 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会岀现解锁失败的情况。
阅读全文