
多线程
文章平均质量分 79
段落总是简写
一个小菜鸡
展开
-
高性能编程——并发容器类list_set_queue
文章目录listArrayListCopyOnWriteListSetHashSetCopyOnWriteArraySetQueuelistArrayList线性表,最常用的是ArrayList,其底层是数组。这个再我一篇集合框架的文章里有详解,可以自己去看看。CopyOnWriteList相当于加了读写锁的ArrayList,适用于读多写少的场景。写锁被占用的时候,大量的读线程就会被阻...原创 2020-01-27 20:02:13 · 338 阅读 · 0 评论 -
高性能编程——并发容器类CurrentHashMap
文章目录JDK1.7版本带注释的源码1.8添加操作1.8对比1.7的优点JDK1.7版本带注释的源码/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * ...原创 2020-01-26 20:54:50 · 354 阅读 · 0 评论 -
高性能编程——线程安全问题之Java锁相关(Synchronized深度解析)
文章目录Java中锁的概念自旋锁乐观锁悲观锁独享锁(写锁)共享锁(读锁)可重入锁、不可重入锁公平锁、非公平锁同步关键字synchronized认识synchronizedsynchronized的特性锁消除锁粗化Java中锁的概念其实在上一章原子性的讲解中已经提到并写过一个锁了,但是这还远远不够,Java中关于锁还是有很多东西需要学习,这里先介绍几个与锁相关的概念。自旋锁指当一个线程在获取...原创 2020-01-14 13:35:07 · 334 阅读 · 0 评论 -
高性能编程——线程安全问题之原子操作
文章目录原子性问题原子操作问题产生的原因原子性问题其实多线程就只有两个重要的问题,一个是可见性问题,另一个则是原子性问题了。本章将会着重讲原子性问题。原子操作上面说到了的原子性问题究竟是什么?先看两段代码和输出结果就知道了。public class Counter { volatile int i = 0 ; public void add(){ i++...原创 2020-01-13 11:18:20 · 2266 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之线程池引用及实现原理剖析
文章目录为什么要用线程池线程是不是越多越好?线程池原理 - 概念线程池API中接口的定义和实现类为什么要用线程池在学习线程池之前首先要明白为什么要用线程池,难倒创建线程他不香吗?线程是不是越多越好?答案肯定是否定的,因为如果是的话,就没必要创建线程池了,那么为什么线程不是越多越好呢?线程在java中是一个对象,更是操作系统的资源,线程创建、销毁都需要时间。如果创建时间+销毁时间>...原创 2020-01-06 16:59:10 · 418 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之线程安全之可见性问题
文章目录Java内存模型(JMM)详解语言规范和虚拟机规范内存模型和JVM的关系多线程中的问题所见非所得可见性问题成因思考会不会是高速缓存的原因真正的罪魁祸首——CPU指令重排序JIT编译器(Just In Time Compiler)真正成因该如何解决可见性问题volatileShared Variables定义冲突线程间操作的定义对于同步的规则定义Word Tearing字节处理Java内存...原创 2020-01-06 16:58:33 · 516 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程封闭
文章目录线程封闭的概念ThreadLocal线程封闭的概念多线程访问共享可变数据时,涉及到线程间数据同步的问题。并不是所有时候都要用到共享数据,所以线程封闭概念就被提出来了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。ThreadLocalThreadLocal是Java里一种特殊变量。它是一个线程级别的变量,每个线程都有一个...原创 2020-01-02 14:50:18 · 204 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程通信
文章目录线程通信的方式文件共享网络共享变量共享线程协作-JDK API被弃用的suspend和resume死锁成因wait/notify机制详细代码park/unpark机制代码示例死锁演示伪唤醒总结线程通信的方式要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间相互通信,分为下面四类:文件共享网络共享共享变量jdk提供的线程协调API:细...原创 2020-01-02 14:27:57 · 594 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之CPU缓存和内存屏障
文章目录CPU性能优化手段——缓存缓存同步协议——MESI协议运行时指令重排两个问题解决方案内存屏障结语CPU性能优化手段——缓存我们都知道CPU是计算机的核心,也是程序所运行之处,人们为了提高程序运行的效率,CPU做了很多优化。缓存就是为了减少访问主内存的开销而使用的。缓存同步协议——MESI协议MESI规定了每个缓存都必须有一个状态位,具体如下:当使用多处理器的时候,单个CPU对缓...原创 2019-12-31 14:29:53 · 248 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程中止
文章目录不正确的线程中止Stop方法Destroy代码示例不正确的线程中止Stop方法中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不推荐使用DestroyJDK并没有实现该方法代码示例为什么不推荐使用stop呢?一段代码就能解答:package com.study.hc.thread.chapter1.thread;public class StopThre...原创 2019-12-31 09:54:27 · 242 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之线程状态
文章目录线程状态线程间状态的转换线程状态实战线程状态线程有6个状态,在Java中通过Thread下的一个枚举类Java.lang.Thread.State可以获取,分别是:New:尚未启动的线程状态Runnable:可运行线程的线程状态Blocked:线程阻塞等待监视器锁定的线程状态,一般都是处于synchronized代码块或者在方法中被阻塞的。Waiting:等待线程的等待状态,...原创 2019-12-30 16:56:01 · 326 阅读 · 0 评论 -
多线程编程基本概念梳理
如果所做的产品最终是面向市场的,那么就不得不面对并发的问题,所以在多线程编程的过程中,有很多概念需要,因为平时很容易遇到并混淆:进程和线程进程是程序的一次执行。在用户下达运行程序的命令后,就会产生进程。线程则是进程中的部分执行的代码段,如果进程是房子,则线程就是房子里的人了。房子只是装人的容器,而真正的功能却是要靠人来实现。同样一个房子里可以只...原创 2019-10-17 13:26:11 · 335 阅读 · 0 评论