JAVA多线程
william_919
这个作者很懒,什么都没留下…
展开
-
七、Java多线程之线程封闭ThreadLocal类
在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程。当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累。由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的理解将会有很大的帮助。 下面是本文的目录大纲: 一.操作系统中为什么会出现进程? ...原创 2019-02-28 15:39:21 · 327 阅读 · 1 评论 -
九、多线程之HashMap与ConcurrentHashMap分析比较
HashMaphashMap的详解。在我的集合栏目中。(1)初始化方法HashMap的实现方式是:数组+链表 的形式。在HashMap中有两个参数会影响HashMap的性能:初始容量/加载因子初始容量:Hash表中桶的数量加载因子:是Hash表在自动增加之前可以达到多满的一个尺度。HashMap在类中定义了这两个参数://初始容量,默认16static final int ...原创 2019-03-22 16:29:51 · 475 阅读 · 0 评论 -
八、Java多线程之 J.U.C并发容器
一、并发容器 J.U.CJUC概述Java并发容器JUC是三个单词的缩写。是JDK下面的一个包名。即Java.util.concurrency。ArrayList、HashMap、HashSet在collection中都有相对应的同步容器保证其线程安全,这节我们介绍一下其对应的并发容器。ArrayList –> CopyOnWriteArrayListCopyOnWriteArra...原创 2019-03-22 15:40:59 · 200 阅读 · 0 评论 -
六、Java多线程之不可变对象
一、不可变对象1、不可变对象概述有一种对象只要它发布了就是安全的,它就是不可变对象。一个不可变对象需要满足的条件:对象创建一个其状态不能修改对象所有域都是final类型对象是正确创建的(在对象创建期间,this引用没有逸出)2、创建一个不可变对象的方法(1)自己定义这里可以采用的方式包括:将类声明为final,这样它就不能被继承。将所有的成员声明为私有的,这样就不允许直接...原创 2019-03-22 11:43:33 · 305 阅读 · 0 评论 -
十三、Java多线程之线程池 Executor
new Thread的弊端每次new Thread 新建对象,性能差。线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM(out of memory内存溢出),这种问题的原因不是因为单纯的new一个Thread,而是可能因为程序的bug或者设计上的缺陷导致不断newThread造成的。缺少更多功能,如更多执行、定期执行、线程中断。线程池的好处...原创 2019-03-25 17:29:37 · 189 阅读 · 0 评论 -
五、Java多线程之不安全类和Collection中的基本同步容器
一、线程不安全的类如果一个类的对象同时可以被多个线程访问,并且你不做特殊的同步或并发处理,那么它就很容易表现出线程不安全的现象。比如抛出异常、逻辑处理错误…下面列举一下常见的线程不安全的类及对应的线程安全类:1、StringBuilder 与 StringBufferStringBuilder是线程不安全的,而StringBuffer是线程安全的。分析源码:StringBuffer的方法使...原创 2019-03-22 11:07:19 · 309 阅读 · 1 评论 -
十二、Java多线程之并发容器J.U.C (Callable与Runnable、Future、ForkJoin、BlockingQueue)
一、Callable与Runnable先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法:public interface Runnable { public abstract void run();}由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。Callable位于java.util.concurr...原创 2019-03-25 16:54:08 · 225 阅读 · 0 评论 -
十一、Java多线程之锁(ReentrantLock、ReentrantReadWriteLock、StempedLock)
ReentrantLockjava中有两类锁,一类是Synchronized,而另一类就是J.U.C中提供的锁。ReentrantLock与Synchronized都是可重入锁,本质上都是lock与unlock的操作。接下来我们介绍三种J.U.C中的锁,其中 ReentrantLock使用synchronized与之比对介绍。ReentrantLock与synchronized的区别可重入...原创 2019-03-25 15:46:55 · 151 阅读 · 0 评论 -
三、Java多线程安全可见性和有序性之Volatile
前言ArrayList也叫数组列表,底层使用的数组实现的,严格来说是动态数组。为了简化,我将从以下几个方面对ArrayList进行分析 常用操作的源码分析 使用场景与小结ArrayList工作原理ArrayList工作原理其实很简单,底层是动态数组,每次创建一个ArrayList实例时会分配一个初始容量(如果指定了初始容量的话),...原创 2019-03-21 17:44:16 · 140 阅读 · 0 评论 -
二、Java多线程安全原子性之Atomic、CAS、Synchronized和Lock
线程安全?当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。线程安全性?线程安全性主要体现在三个方面:原子性、可见性、有序性原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作可见性:一个线程对主内存的修改可以及时的被其他线程观察到有序性:一个线程...原创 2019-03-21 11:51:01 · 853 阅读 · 0 评论 -
一、JAVA多线程之并发基础(内存模型)
一、高并发相关基础知识1、工具Apache Bench(AB) :Apache附带的工具,测试网站性能 — ApacheBench安装及使用方法。Jmeter : Apache组织开发的压力测试工具(比AB更强大)代码测试方法 :Semaphore、CountDownLatch类Semaphore类:信号量信号量,在我们测试的过程中充当监控并发数的角色。能够维持在同一时间的请求的并...原创 2019-03-21 11:49:05 · 171 阅读 · 0 评论 -
JAVA多线程知识图谱
原创 2019-03-21 10:13:14 · 385 阅读 · 0 评论 -
四、Java多线程之安全发布对象与多种单例模式
三、多线程(以后单独讲):1、进程和线程:进程:正在进行的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。线程:进程内部的一条执行路径或者一个控制单元。两者的区别:一个进程至少有一个线程进程在执行过程中拥有独立的内存单元,而多个线程共享内存;2、jvm多线程的启动是多线程吗?java的虚拟机jvm启动的是单线程,就有发生内存泄露的可能,而我们使用ja...原创 2019-03-05 10:35:30 · 123 阅读 · 0 评论 -
十、Java多线程之J.U.C 并发容器AQS组件(CountDownLatch、Semaphore、CyclicBarrier)
AQSAQS概述AQS(AbstractQueuedSynchronizer),是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类。它实现了一个FIFO(FirstIn、FisrtOut先进先出)的队列。底层实现的数据结构是一个双向列表。Sync queue:同步队列,是一个双向列表。包括head节点和tail节点。head节点主要用作后续的调度。C...原创 2019-03-22 17:48:17 · 169 阅读 · 0 评论