
多线程学习
文章平均质量分 83
多线程基础知识、并发过程中的可见性问题,原子性问题,happens-before原则,java内存模型,java线程同步的volatile,synchronize学习,线程间的通信
z1340954953
男儿当自强
展开
-
队列、阻塞队列
队列队列是一种先入先出的数据结构,新加入的元素都是加入到队列的后面阻塞队列java.util.concurrent.BlockingQueue<E>,是一种支持阻塞的插入元素,阻塞的移除元素操作的队列。阻塞的插入:当队列空间满了,阻塞线程继续向队列中添加元素阻塞的移除:当队列空间空了,阻塞线程从队列中取出元素从这里看出,阻塞队列可以用在生产者/消费者模型中,生产者是向队列中添加元素的线...原创 2018-05-08 14:14:58 · 353 阅读 · 0 评论 -
多生产者-消费者中假死现象的处理
单个的生产者-消费者模型package com.ftf.thread.lock;public class Factory { private volatile boolean flag = true; private Object obj = new Object(); public void setValue(){ synchronized (obj) { try { ...原创 2018-05-08 14:39:53 · 2107 阅读 · 0 评论 -
Lock接口、重入锁ReentrantLock、读写锁ReentrantReadWriteLock
Lock特点Lock接口提供了和synchronized关键字类似的同步功能,synchronized关键字只是隐式低获取锁,而lock拥有了锁获取和释放的可操作性、可中断的获取锁以及超时获取锁等同步特性Lock使用Lock lock = new ReentrantLock();lock.lock();try{ }finally{ lock.unlock();}在finally块...原创 2018-05-02 17:47:05 · 386 阅读 · 0 评论 -
Lock对象Condition接口实现等待/通知
关键字Synchronized与wait()和notify()/notifyAll()方法相结合可以实现等待通知,ReentrantLock借助Condition对象可以实现同样的功能,而且一个lock对象可以创建多个condition对象,从而能够选择性condition对象进行等待/通知condition对象实现等待通知的简单案例public class ConditionLockDemo {...原创 2018-05-03 15:51:04 · 434 阅读 · 0 评论 -
线程间通信_等待/通知机制
等待/通知的相关方法式任意java对象都具备的,notify,wait方法被定义在java.lang.Object,都是final,不可重写,是实例方法,新手比较容易出错的地方是,调用时候必须调用 锁对象.wait()/锁对象.nofity(),并且只能在临界区中调用具体了解下,notify,wait定义等待/通知方法名称描述notify()通知在同一个对象上等待的线程,使其从wait()方法返回...原创 2018-04-23 16:43:37 · 369 阅读 · 0 评论 -
线程间通信_等待/通知之Thread.join()
Thread.join源码:public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { ...原创 2018-04-24 11:32:46 · 341 阅读 · 0 评论 -
ThreadLocal的使用
ThreadLocal的作用从上一篇对于ThreadLocal的源码分析,可以看出ThreadLocal不是用来将解决共享对象的多线程访问问题,每个线程可以将线程的私有数据通过ThreadLocal的set方法设置到线程的私有的ThreadLocalMap中,其他线程无法访问到。各个线程中的ThreadLocal.ThreadLocalMap以及ThreadLocal.ThreadLocalMap...原创 2018-04-27 10:54:24 · 298 阅读 · 0 评论 -
ThreadLocal源码解读
ThreadLocal的三个理论基础1. 每个线程都有一个自己的ThreadLocal.ThreadLocalMap对象,ThreadLocal类中定义了静态类ThreadLocalMap,静态类ThreadLocalMap中定义了Entry结构存储static class ThreadLocalMap { /** * The entries in this h...转载 2018-04-26 15:27:26 · 307 阅读 · 0 评论 -
多线程中线程停止的问题
问题 在学习多次线程的过程,使用中断标志来控制线程的停止,结果出现子线程不会中断一直在运行package pageWeb;public class ThreadDemo1 implements Runnable{ public static void main(String[] args) throws InterruptedException { ThreadDemo1 t1转载 2017-06-18 08:55:39 · 884 阅读 · 0 评论 -
使用数组简单实现的阻塞队列
阻塞队列的简单实现原创 2017-08-17 15:13:53 · 3244 阅读 · 0 评论 -
java并发编程学习(一) 并发编程的挑战
并发编程常见问题原创 2017-11-15 11:21:11 · 430 阅读 · 0 评论 -
java并发编程学习(二) 多线程基础知识
什么是进程,什么是线程?进程:程序执行的一个单元,理解为一项任务,比如window上运行的酷狗音乐、浏览器等执行程序就是一个进程。线程:线程是比进程更小的执行单元,一个进程有多个线程,多个线程在执行时候,共享一块内存区域。需要了解的重要概念并发和并行并发:多个线程交替执行,也有可能串行执行,不是真正意义上的同时执行并行:真正意义上的同时执行单核CPU上,多线程是交替执行...原创 2017-11-20 11:29:25 · 358 阅读 · 0 评论 -
java并发编程学习(八) synchronized详解
synchronized实现同步的基础:java中的每一个对象都可以作为锁,具体表现为三种形式1> 对于普通的同步方法,锁是当前实例2> 对于静态同步方法,锁是当前类的class对象3> 对于同步方法块, 锁是synchronized ,synchronize(obj) {} ,obj 是锁对象 当一个线程试图访问同步代码块时候,它首先必须得到锁,退出或者抛出异常必须原创 2017-11-20 14:17:18 · 419 阅读 · 0 评论 -
java并发编程学习(三) 原子操作的实现原理及java中如何实现原子操作
原子操作,就是一个或者一系列不能中断的操作,并发编程中经常遇见的原子性问题。了解之前,先介绍下一些术语。cpu术语定义术语名称解释缓存行缓存的最小操作单位比较并交换 cascas 比较并交换,一个新值cpu流水线cpu中由5~6个电路单元组成一个指令处理流水线,然后将一条x86指令分为5~6布交由执行,这样在一个cp原创 2017-11-20 17:02:34 · 428 阅读 · 0 评论 -
java并发编程学习(四) Java内存模型详解
Java内存模型是用来做什么的主要目标Java内存模型抽象结构 Java内存模型如何保证内存一致性happens-before 原则Java内存模型的有序性从源代码到指令序列的重排序重排序导致的线程安全问题Java内存模型如何解决重排序导致的线程安全问题 volatile 禁止 指令重排synchronized锁控制线程串行执行总...原创 2017-11-21 09:31:52 · 573 阅读 · 0 评论 -
java并发编程学习(五) 重排序和顺序一致性
多线程重排序原创 2017-11-29 09:56:23 · 870 阅读 · 0 评论 -
java并发编程学习(七) volatile特性详解
简介特性可见性验证不具有原子性验证解决volatile复合操作不具有原子性将复合操作使用同步锁控制,控制执行复合操作每个时刻只有一个线程使用并发包中的Atomic类操作禁止指令重排有什么用?注意简介volatile是Java虚拟机提供的轻量级锁,在一些场景上可以用来替换synchronized锁,而且效率更高,比如多个线程共享某个变量的值时候,要...原创 2017-11-29 14:24:12 · 598 阅读 · 0 评论 -
java并发编程学习(六)锁的内存语义和java线程间的通信方式
多线程中锁的内存语义,java线程中的通信方式原创 2017-12-07 10:17:39 · 439 阅读 · 0 评论 -
java多线程学习(九)final的内存语义
final的内存语义原创 2017-12-07 11:28:31 · 2781 阅读 · 2 评论 -
java多线程学习(十) happen before 原则
多线程中happens -before 原则原创 2017-12-17 21:51:24 · 592 阅读 · 0 评论 -
java多线程学习(十一) 常见的单例模式线程安全性分析
类初始化锁 怎么理解?为什么需要了解?常见的单例模式分析懒汉式为什么线程不安全验证饿汉式为什么线程安全双重检查锁定方式演变由来为什么线程不安全如何解决线程不安全静态类方式为什么线程安全结论类初始化锁Java语言规范规定,对于每一个类或接口C,都有一个唯一的初始化锁LC与之对应,从C到LC的映射,由JVM的具体实现去自由实现。JV...原创 2017-12-22 14:24:53 · 956 阅读 · 0 评论 -
java多线程基础(二)理解中断
多线程中断的理解原创 2017-12-29 11:02:43 · 387 阅读 · 0 评论 -
java多线程基础值对象和变量的并发访问之synchronized(二)
变量的并发访问之synchronized原创 2018-01-04 15:49:22 · 543 阅读 · 0 评论