Java 可见性 内存模型 主存 所有线程都可以访问 本地内存 每个线程私有的内存 可见性的方法 volatile 这种方式可以保证每次取数直接从主存取 它只能保证内存的可见性,无法保证原子性 它不需要加锁,比 synchronized 更轻量级,不会阻塞线程 不会被编译器优化 然而要求对这个变量做 ...
分类:
编程语言 时间:
2018-05-21 12:21:35
阅读次数:
147
这三个函数的作用都是给文件加锁,那它们有什么区别呢? 首先flock和fcntl是系统调用,而lockf是库函数。lockf实际上是fcntl的封装,所以lockf和fcntl的底层实现是一样的,对文件加锁的效果也是一样的。后面分析不同点时大多数情况是将fcntl和lockf放在一起的。 下面首先看 ...
分类:
其他好文 时间:
2018-05-20 19:30:27
阅读次数:
169
单例模式。构造函数是私有的,通过一个共有的成员函数还调用这个构造函数,在多线程环境下,还需要对这个成员函数进行加锁。下面是4种单例的创建方式,最安全也最好的是第4种,使用内部类的方式。 1、懒汉式单例,线程不安全的 2、懒汉式单例,线程安全的 这种写法能够在多线程中很好的工作,而且看起来它也具备很好 ...
分类:
其他好文 时间:
2018-05-20 18:12:37
阅读次数:
134
copyOnWriteArray 记录一下 add的时候枷锁,先复制,后赋值;get的时候并没有加锁,(导致多线程的时候可能get不到最近的值) ...
分类:
编程语言 时间:
2018-05-19 20:35:09
阅读次数:
191
共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 排他锁【X锁】又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A, ...
分类:
其他好文 时间:
2018-05-18 01:20:32
阅读次数:
150
本文转自https://m.imooc.com/article/details?article_id=17289 感谢作者 上节回顾 上两篇记录了我对MySQL 事务 隔离级别read uncommitted 、MySQL 事务隔离级别 read committed+MVCC 的理解。这篇记录我对 ...
分类:
数据库 时间:
2018-05-18 00:35:02
阅读次数:
176
本文转自https://m.imooc.com/article/details?article_id=17290 感谢作者 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解。这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解。 前 ...
分类:
数据库 时间:
2018-05-18 00:25:01
阅读次数:
243
本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.2 关于这篇分享对以上问题的解决 2.事务本质剖析 2.1 什么是事务? 2.2.1 如下表格所示: 2.2.2 对上述表格内容的解释 个人理解 ...
分类:
数据库 时间:
2018-05-17 23:20:55
阅读次数:
205
JMM关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷新到主内存中 2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值 (注意:加锁与解锁需要是同一把锁) 通过以上两点,可以看到synchronized能够实现可见性。同时 ...
分类:
其他好文 时间:
2018-05-17 15:25:43
阅读次数:
177
互斥锁 Linux提供互斥锁mutex(又称互斥量)。每个线程在对资源进行操作前都尝试先加锁,成功加锁了之后才能操作该资源,操作结束后就解锁。在同一时间,锁只有一把,如果线程A加锁正在访问资源,这时B尝试加锁,就会阻塞。但是互斥锁有个特点,就是不加锁也可以访问数据,比如之前的线程A加锁了正在访问资源 ...
分类:
其他好文 时间:
2018-05-17 15:12:18
阅读次数:
173