随笔分类 -  JUC

java 多线程知识学习
Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理
摘要:1.什么是ThreadLocal ThreadLocal顾名思义是线程局部变量。这种变量和普通的变量不同,这种变量在每个线程中通过get和set方法访问, 每个线程有自己独立的变量副本。线程局部变量不存在多个线程同时对同一个变量的操作,所以不会有线程安全问题。 2.ThreadLocal变量的使用 阅读全文

posted @ 2018-08-14 08:07 pony1223 阅读(843) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十四:简易数据库连接池
摘要:参考资料: 《java并发编程实战》龙果学院 阅读全文

posted @ 2018-08-11 20:49 pony1223 阅读(260) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十三:Condition原理分析
摘要:先来回顾一下java中的等待/通知机制 我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。 自旋实现的等待通知 最简单的实现方法就是将conditi 阅读全文

posted @ 2018-08-11 20:47 pony1223 阅读(2324) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十二:Condition的使用
摘要:Condition的使用 Condition用于实现条件锁,可以唤醒指定的阻塞线程。下面来实现一个多线程顺序打印a,b,c的例子。 先来看用wait和notify的实现: public class Demo { private volatile int singal; public synchron 阅读全文

posted @ 2018-08-11 20:41 pony1223 阅读(364) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十一:线程通信wait&notify&join
摘要:wait和notify wait和notify可以实现线程之间的通信,当一个线程执行不满足条件时可以调用wait方法将线程置为等待状态,当另一个线程执行到等待线程可以执行的条件时,调用notify可以唤醒等待的线程。需要强调的是,在调用wait和notify时需要先获取锁,否则会抛出IllegalM 阅读全文

posted @ 2018-08-11 20:38 pony1223 阅读(297) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十:线程安全性问题简单总结
摘要:一、出现线程安全性问题的条件 •在多线程的环境下 •必须有共享资源 •对共享资源进行非原子性操作 二、解决线程安全性问题的途径 •synchronized (偏向锁,轻量级锁,重量级锁) •volatile •JDK提供的原子类 •使用Lock(共享锁,排它锁) 三、认识的“*锁” •偏向锁 Jav 阅读全文

posted @ 2018-08-11 20:34 pony1223 阅读(326) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十九:AQS 剖析
摘要:一、引言在JDK1.5之前,一般是靠synchronized关键字来实现线程对共享变量的互斥访问。synchronized是在字节码上加指令,依赖于底层操作系统的Mutex Lock实现。而从JDK1.5以后java界的一位大神—— Doug Lea 开发了AbstractQueuedSynchro 阅读全文

posted @ 2018-08-11 20:21 pony1223 阅读(854) 评论(0) 推荐(2) 编辑

Java并发编程原理与实战十八:读写锁
摘要:ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 基本规则: 读读不互斥 读写互斥 写写互斥问题: 既然读读不互斥,为何还要加读锁答: 如果只是读,是不需要加锁的,加锁本身 阅读全文

posted @ 2018-08-06 08:25 pony1223 阅读(1815) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十七:AQS实现重入锁
摘要:一、什么是重入锁 可重入锁就是当前持有锁的线程能够多次获取该锁,无需等待 二、什么是AQS AQS是JDK1.5提供的一个基于FIFO等待队列实现的一个用于实现同步器的基础框架,这个基础框架的重要性可以这么说,JCU包里面几乎所有的有关锁、多线程并发以及线程同步器等重要组件的实现都是基于AQS这个框 阅读全文

posted @ 2018-08-05 17:50 pony1223 阅读(740) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十六:AQS
摘要:一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo 阅读全文

posted @ 2018-08-05 17:50 pony1223 阅读(274) 评论(2) 推荐(0) 编辑

Java并发编程原理与实战十五:手动实现一个可重入锁
摘要:package com.roocon.thread.ta1; 运行结果: 现在来模拟下,基于以上代码,锁是否可重入: 分析以上运行结果: 线程1调用a方法,第一次进入lock方法,去获取锁。此时,isLocked为false,于是将标志锁改为true。然后,输出a。再去执行b方法。此时,再次去调用l 阅读全文

posted @ 2018-08-02 08:04 pony1223 阅读(290) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十四:Lock接口的认识和使用
摘要:保证线程安全演进: synchronized volatile AtomicInteger Lock接口提供的方法: void lock():加锁 void unlock():解锁 void lockInterruptibly():在多个线程并发获取锁的时候,那么,当有些线程拿不到锁时会等待,会不停 阅读全文

posted @ 2018-08-02 08:00 pony1223 阅读(275) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十三:JDK提供的原子类原理与使用
摘要:原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型: 运行结果: 运行结果: 对CAS的源码理解:--初步理解 在AtomicInteger中有这样一段源码: 其中,compareAndSwap就是CAS的缩写。如果prev和next不相等,则返回true。否则,返回f 阅读全文

posted @ 2018-08-02 07:57 pony1223 阅读(241) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十二:深入理解volatile原理与使用
摘要:volatile:称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的。 可见:一个线程修改了这个变量的值,在另一个线程中能够读取到这个修改后的值。 synchronized除了线程之间互斥之外,还有一个非常大的作用,就是保证可见性。以下demo即保证a值的可见性。 首先来看demo: 阅读全文

posted @ 2018-07-27 00:12 pony1223 阅读(430) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十一:锁重入&自旋锁&死锁
摘要:一、锁重入 运行结果: 以上结果说明,线程A在释放方法a的同步锁之前,是可以重新获得b方法的同步锁的。同一个线程拿到同一个对象的锁,它是可以进入另一个同步方法的,这就是锁的重入。以上代码仅仅是同一个线程在一个同步方法中去成功调用另一个同步方法,并且,锁的是同一个实例。那么,不同的线程拿同一把对象去加 阅读全文

posted @ 2018-07-27 00:09 pony1223 阅读(472) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十:单例问题与线程安全性深入解析
摘要:单例模式我想这个设计模式大家都很熟悉,如果不熟悉的可以看我写的设计模式系列然后再来看本文。单例模式通常可以分为:饿汉式和懒汉式,那么分别和线程安全是否有关呢? 一、饿汉式 先看代码: 运行结果: 所谓的饿汉模式:不管是否使用到instance这个实例,我们都在创建的过程中就对它进行实例化。 那么,饿 阅读全文

posted @ 2018-07-27 00:01 pony1223 阅读(395) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战九:synchronized的原理与使用
摘要:一、理论层面 内置锁与互斥锁 修饰普通方法、修饰静态方法、修饰代码块 二、JVM层面 查看xx方法同步代码块字节码: 查看同步方法字节码: 任何对象都可以作为锁,那么锁信息又存在对象的什么地方呢? 存在对象头中。 对象头中的信息: Mark Word Class Metadata Address 类 阅读全文

posted @ 2018-07-25 23:53 pony1223 阅读(716) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
摘要:前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析。 一、问题引出 先看一段代码 运行结果:仔细发现,出现了两个84,但代码想要的结果是,每个线程每次执行,就在原来的基础上加一。因此,这里就是 阅读全文

posted @ 2018-07-24 23:23 pony1223 阅读(585) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战七:线程带来的风险
摘要:在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源。但使用多线程同时会带来相应的风险,本文将展开讨论。 一、引言 多线程将会带来几个问题: 1、安全性问题 线程安全性可能是非常复杂的,多线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果,另外由于存在指令重排序的可能 阅读全文

posted @ 2018-07-24 22:43 pony1223 阅读(364) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战六:主线程等待子线程解决方案
摘要:本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 首先是一个线程,它执行完成需要5秒。 1、主线程等待一个子线程 在主线程中,需要等待子线程执行完成。但是执行上面的main发现并不是想要的结果: 子线程执行时长:0Thread-0子线程开始Thread-0子线程结束 很明显主线 阅读全文

posted @ 2018-07-23 23:59 pony1223 阅读(6164) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示