Loading

随笔分类 -  Java编发编程

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