07 2019 档案

摘要:读写锁ReentrantReadWriteLock概述 读写锁ReentrantReadWriteLock,使用它比ReentrantLock效率更高。 读写锁表示两个锁,一个是读操作相关的锁,称为共享锁;另一个是写操作相关的锁,称为排他锁。 1、读和读之间不互斥,因为读操作不会有线程安全问题 2、 阅读全文
posted @ 2019-07-30 14:25 Rest探路者 阅读(290) 评论(0) 推荐(0) 编辑
摘要:加锁和解锁 我们来看下ReentrantLock的基本用法 ThreadDomain35类 MyThread40_0类,增加线程 MyThread40_1类,减少线程 main方法,启动线程 输出结果如下 可以看到,lists的数量不会增加太多,也不会减少太多。当集合满,使增加线程等待,唤醒减少线程 阅读全文
posted @ 2019-07-22 15:25 Rest探路者 阅读(426) 评论(0) 推荐(0) 编辑
摘要:wait(),notify()和notifyAll()介绍 1.wait() 当线程执行wait()时,会把当前的锁释放,然后让出CPU,进入等待状态。 只能在同步方法调用wait()。 2.notify() 当执行notify/notifyAll方法时,会唤醒一个处于等待该对象锁的线程,然后继续往 阅读全文
posted @ 2019-07-15 19:02 Rest探路者 阅读(765) 评论(0) 推荐(0) 编辑
摘要:死锁 概念 当线程Thread 0持有锁Lock1,Thread 1持有锁Lock2,此时Thread 0申请Lock2锁的使用权,Thread 1申请Lock1锁的使用权,Thread 0和Thread 1都在无限地等待锁的使用权。这样就造成了死锁。 死锁是主要由于设计的问题。一旦出现死锁,死锁的 阅读全文
posted @ 2019-07-08 17:48 Rest探路者 阅读(285) 评论(0) 推荐(0) 编辑
摘要:volatile volatile是一种轻量同步机制。请看例子 MyThread25类 输出结果如下 为什么程序始终不结束?说明mt.setRunning(false);没有起作用。 这里我们说下Java内存模型(JMM) java虚拟机有自己的内存模型(Java Memory Model,JMM) 阅读全文
posted @ 2019-07-04 15:57 Rest探路者 阅读(641) 评论(0) 推荐(0) 编辑
摘要:多线程安全 脏读:多个线程对同一个对象的实例变量进行修改后访问,导致读到的数据是被修改过的。 实例 ThreadDomain16类 MyThread16_0类 MyThread16_1类 启动MyThread16_0 和MyThread16_1 线程 main方法 输出结果如下 理论上应该输出a n 阅读全文
posted @ 2019-07-02 17:37 Rest探路者 阅读(417) 评论(0) 推荐(0) 编辑

levels of contents
点击右上角即可分享
微信分享提示