同步锁
ruijiao_ren
这个作者很懒,什么都没留下…
展开
-
多线程学习(四)——线程同步之同步代码块和同步方法(银行取钱问题)
关于线程安全问题,有一个很经典的问题——银行取钱问题。银行取钱的基本流程基本上可以分为以下几个步骤: 1、用户输入账户、密码,系统判断用户的账户、密码是否匹配 2、用户输入取款金额 3、系统判断取账户余额是否大于取款金额 4、如果余额大于取款金额,则取款成功;如果余额小于取款金额,则取款失败 在单一线程中这个流程没有任何问题...原创 2018-02-27 19:18:46 · 767 阅读 · 0 评论 -
多线程学习(五)——线程同步之同步锁(Lock)(银行取钱问题)
前面学习的synchronized是隐式的同步监视器。 从java5开始,java提供了一种功能更加强大得线程同步机制——通过显式定义同步锁对象来实现同步,这种机制下,同步锁由Lock对象来充当。 Lock提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock允许实现更加灵活的结构,可以具有差别很大的属性,并且支持...原创 2018-02-27 21:35:11 · 1259 阅读 · 0 评论 -
多线程学习(七)——线程通信之使用Condition通信
synchronized是隐式同步监视器,它可以使用wait(),notify(),notifyAll()方法来进行线程通信。 使用Lock对象来保证同步,需要使用java提供的Condition类来保持协调,使用Condition可以让那些已经得到Lock对象却无法继续执行的线程释放Lock对象,Condition对象也可以唤醒其他处于等待的线程。 C...原创 2018-02-28 11:26:43 · 505 阅读 · 0 评论 -
多线程学习(八)——线程通信之阻塞队列(BlockingQueue)控制线程通信(生产者、消费者问题)
java5提供了一个BlockingQueue接口,虽然它也是Queue的子接口,但是它的主要用途不是作为容器,而是作为线程同步工具。BlockingQueue有一个特征:当生产者线程试图向BlockingQueue种放入元素的时候,如果该队列已满,则该线程被阻塞;当消费者线程试图从BlockingQueue种取元素的时候,如果该队列已空,则该线程被阻塞。 程序的两个...原创 2018-02-28 13:49:57 · 420 阅读 · 0 评论