Java 5中提供了另一种实现线程同步或互斥的机制,即使用Lock和Condition。 Lock比传统线程模型中的synchronized方式更加面向对象,也提供了更多可选择的锁机制。与生活中的锁类似,锁本身也是一个对…
分类:java并发
【java】——什么是可重入锁以及实际应用场景
首先锁是针对线程的,即只有线程才有锁的概念。 什么是可重入锁呢? 当一个线程获取了某个对象锁以后,还可以再次获得该对象锁。 什么时候我们会用到可重入锁呢? 看下面的demo public class Demo1 { pu…
Java 使用 happen-before 规则实现共享变量的同步操作
前言 熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。 按照官方…
Java多线程系列--“JUC线程池”02之 线程池原理(一)
ThreadPoolExecutor简介 ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为”存放一定数量线程的一个线程集合。 Executor框架最核心的类是Th…
JUC源码分析18-队列-LinkedBlockingQueue
LinkedBlockingQueue是基于单向链表实现的有界阻塞队列,队列元素遵循FIFO,LinkedBlockingQueue比基于数组的阻塞队列拥有更好的吞吐量,但是在大部分并发应用中,性能不如基于数组的队列。 …
Java并发编程札记-(四)JUC锁-01概述
今天来学习JUC锁。JUC锁位于java.util.concurrent.locks包下,为锁和等待条件提供一个框架,它不同于内置同步和监视器。 参考JDK1.8的java.util.concurrent.locks包,…
Java并发编程札记-(三)JUC原子类-03原子方式更新数组
今天学习AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray,这几个类的共同特点是都提供数组的原子方式访问和更新功能。下面以AtomicLongArray为代表,…
简单java死锁设计002
/** * 死锁举例 * @author lenovo * */ public class DeadlockTest { private static Object obj1 = new Object(); privat…
Java内置锁synchronized的实现原理
简述Java中每个对象都可以用来实现一个同步的锁,这些锁被称为内置锁(Intrinsic Lock)或监视器锁(Monitor Lock)。 具体表现形式如下: 1、普通同步方法,锁的是当前实例对象 2、静态同步方法,锁…
java.util.concurrent包学习(一)锁的基本原理
与synchronized不同,Lock完全用Java写成,在java这个层面是无关JVM实现的。 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLo…
java的多线程安全,ReentrantLock与synchronized锁
前言 多线程总的来说是一个很大的模块,所以虽然之前就想写但一直感觉有地方没有理解透,在经过了一段时间学习后,终于有点感觉了,在此写下随笔。 多线程安全问题##: 首先和大家讨论一下多线程为什么会不安全,大家先看下面的程序…
Java多线程-线程的锁总结
一、多线程–同步函数的锁是this /*同步函数用的是哪一个锁呢?函数需要被对象调用。那么函数都有一个所属对象引用。就是this。所以同步函数使用的锁是this。 通过该程序进行验证。 使用两个线程来买票。一…