java多线程
java多线程
大龄码农生活
这个作者很懒,什么都没留下…
展开
-
线程池是怎样工作的
转自:https://mp.weixin.qq.com/s/22e4s862E7tT45Ged019Eg 我们在工作中或多或少都使用过线程池,但是为什么要使用线程池呢?从他的名字中我们就应该知道,线程池使用了一种池化技术,和很多其他池化技术一样,都是为了更高效的利用资源,例如链接池,内存池等等。 数据库链接是一种很昂贵的资源,创建和销毁都需要付出高昂的代价,为了避免频繁的创建数据库链接,所以产生了链接池技术。优先在池子中创建一批数据库链接,有需要访问数据库时,直接到池子中去获取一个可用的链接,使用完了之原创 2020-10-14 18:08:21 · 185 阅读 · 0 评论 -
java多线程---线程池详解
线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理。例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升。另外一个好处是可以设定池化对象的上限, 例如预防创建线程数量过多导致系统崩溃的场景。 jdk中的线程体系 1、线程池的优势 (1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗; (2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新...原创 2020-09-18 16:12:42 · 414 阅读 · 0 评论 -
Java并发编程:synchronized和锁优化
一. 使用方法 synchronized 是 java 中最常用的保证线程安全的方式,synchronized 的作用主要有三方面: 确保线程互斥的访问代码块,同一时刻只有一个方法可以进入到临界区 保证共享变量的修改能及时可见 有效解决重排序问题 语义上来讲,synchronized主要有三种用法: 修饰普通方法,锁的是当前对象实例(this) 修饰静态方法,锁的是当前 Class 对象(静态方法是属于类,而不是对象) 修饰代码块,锁的是括号里的对象 二、实现原理 2.1、监视器锁 ..原创 2020-09-17 10:59:55 · 124 阅读 · 0 评论 -
java多线程学习第六课---原子操作 CAS
概述 CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。 CAS的原理 CAS(Compare And Swap),指令级别保证这是一个原子操作 三个运算符: 一个内存地址V,一个期望的值A,一个新值B 基本思路:如果地址V上的值和期望的值...原创 2019-05-23 17:46:00 · 155 阅读 · 0 评论 -
java多线程学习第五课---Java内存模型之从JMM角度分析DCL
DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么会写错呢?其错误根源在哪里?有什么解决方案? 问题分析 我们先看单例模式里面的懒汉式: public class Singleton { private static Singleton singleton; priv...原创 2019-05-23 17:14:53 · 118 阅读 · 0 评论 -
java多线程学习第四课---深入剖析volatile关键字
1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 先看一段代码,假如线程1先执行,线程2后执行: //线程1 boolean...转载 2019-05-23 15:19:34 · 156 阅读 · 0 评论 -
java多线程学习第三课---让你彻底理解Synchronized
转载:https://www.jianshu.com/p/d53bf830fa09 1. synchronized简介 在学习知识前,我们先来看一个现象: public class SynchronizedDemo implements Runnable { private static int count = 0; public static void ma...转载 2019-05-23 15:15:45 · 144 阅读 · 0 评论 -
java多线程学习第二课---java内存模型和happens-before规则
一 定义 java内存模型 即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory...原创 2019-05-23 14:50:22 · 220 阅读 · 0 评论 -
java多线程学习第一课---线程jic
一、并发和并行 1.1 概念 并行:多个CPU实例或是多台机器同时执行一段处理逻辑,是真正的同时。 并发:通过CUP调度算法,让用户看上去同时去执行,实际上从CPU操作层面并不是真正的同时。并发往往需要公共的资源,对公共资源的处理和线程之间的协调是并发的难点。 1.2 比较 如果你想要一个程序运行的更快,那么可以将其断开为多个片段,在单独的处理器上运行每个片段。并发是用于多处理器编...原创 2019-05-11 13:57:19 · 173 阅读 · 0 评论 -
java多线程学习第八课---J.U.C之重入锁:Condition
此篇博客所有源码均来自JDK 1.8 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法...转载 2019-05-24 17:08:57 · 118 阅读 · 0 评论 -
java多线程学习第七课---J.U.C之重入锁:ReentrantLock
ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 API介绍如下: 一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。Reentra...原创 2019-05-24 17:05:38 · 124 阅读 · 0 评论 -
java多线程学习第六课---AQS
一、前言 AQS的全称为(AbstractQueuedSynchronizer),我们知道的java.util.concurrent包下很多类如,ReetrantLock ,CountDownLactch(闭锁),Semaphore(信号量)都是基于AQS架构上构建的。因此笔者的理解AQS是Lock实现的前提。 二、数据结构 state表示共享的资源数量,而列表是一个FIFO队列(...原创 2019-05-24 16:41:54 · 181 阅读 · 0 评论