一 一 一☛ java线程安全✯
文章平均质量分 90
jinggod
这个作者很懒,什么都没留下…
展开
-
实现多线程安全的3种方式
1、先来了解一下:为什么多线程并发是不安全的? 在操作系统中,线程是不拥有资源的,进程是拥有资源的。而线程是由进程创建的,一个进程可以创建多个线程,这些线程共享着进程中的资源。所以,当线程一起并发运行时,同时对一个数据进行修改,就可能会造成数据的不一致性,看下面的例子: 假设一个简单的int字段被定义和初始化: int counter = 0; 该counter字段在两个线程A和B原创 2017-10-18 17:56:24 · 35765 阅读 · 2 评论 -
并发工具类(一)等待多线程完成的CountDownLatch
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger; CountDownLatch、CyclicBarrier、Semphore 这三个工具类提供一种并发流程的控制手段;而Exchanger工具类则提供了在线程之间交换数据的一种手段。简介 CountDow原创 2017-11-15 01:50:34 · 307 阅读 · 0 评论 -
显式锁(三) -- 读写锁ReadWriteLock
前言: 上一篇文章,已经很详细地介绍了 显式锁Lock 以及 其常用的实现方式- - ReetrantLock(重入锁),本文将介绍另一种显式锁 - - 读写锁ReadWriteLock。 前面介绍的隐式锁Synchronize、重入锁ReetrantLock都是互斥锁、独占锁,即同一个锁只能每时每刻至多由一个线程来获持有。互斥,是一种保守策略,虽然避免了“写/写”、“读/写”冲突,但也阻原创 2017-11-14 11:23:19 · 416 阅读 · 0 评论 -
显式锁(二)--- Lock接口与显示锁
一、显式锁简介 显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制。显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一种协调共享对象访问的机制。但是它不是用来替代内置锁的,而是一种可选择的高级功能。 1、Lock接口提供了synchronized关键字不具备的主要特性:尝试非阻塞获取锁:当前线程尝试获取锁,如果这一时原创 2017-11-13 17:53:59 · 422 阅读 · 0 评论 -
内置锁(二)--synchronized下的等待/通知机制
一、等待/通知机制的简介线程之间的协作: 为了完成某个任务,线程之间需要进行协作,采取的方式:中断、互斥,以及互斥上面的线程的挂起、唤醒;如:生成者–消费者模式、或者某个动作完成,可以唤醒下一个线程、管道流已准备等等; 等待/通知机制: 等待/通知机制 是线程之间的协作一种常用的方式之一,在显示锁Lock 和 内置锁synchronized都有对应的实现方式。 等待/通知机制 经典原创 2017-11-02 10:25:59 · 693 阅读 · 0 评论 -
内置锁(一)--- synchronized 介绍与用法
一、synchronized 的介绍 synchronized 是 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码,而这段代码也被称为临界区。 synchronized 有多个叫法,而每个叫法都表明synchronized 的特性:1、内置锁(又叫 隐式锁):synchronized 是内置于JDK中的,底层实现是nativ原创 2017-11-01 23:03:24 · 482 阅读 · 0 评论 -
显示锁(一)--- synchronized 的局限性 与 Lock 的优点
转载自 Java 并发:Lock 框架详解 摘要: 我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以synchronized与转载 2017-11-08 21:39:13 · 601 阅读 · 0 评论 -
内置锁(三)---- synchronized的几个要注意的对象监视器
前言 经过前面的两篇文章的介绍,可以清楚知道,synchronized可以用于修饰一个方法 或者 代码块,线程要访问这些临界区代码,则要先获取对应的 对象监视器 ,从而使多个线程互斥访问临界区。 然而,区别是不是同一个对象监视器,是根据对象监视器的内存地址是否一样。这就意味着,想要某些线程在同一个 对象监视器 上竞争临界区代码,那么就必须保证他们获取的对象监视器是同一个。 如果使原创 2017-11-08 00:55:48 · 327 阅读 · 0 评论 -
java线程阻塞中断和LockSupport的常见问题
这里仅包含要讨论的几个问题的答案,具体讨论过程查看原文:java线程阻塞中断和LockSupport的常见问题 问题1: Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException异常? 答: Thread.interrupt()只是在Object.wait() .Object.join(转载 2017-10-22 15:53:28 · 470 阅读 · 0 评论 -
并发基础(八) java线程的中断机制
一、线程中断机制的原理 java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。 中断 可以认为是线程之间的一种通信的消息类型,当线程接到了一个中断消息时,怎么处理是线程的控制的,甚至可以不处理,其他线程无法干涉。 在Core Java中有这样一句话: “没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该原创 2017-10-22 15:09:21 · 373 阅读 · 0 评论