多线程
hp15
这个作者很懒,什么都没留下…
展开
-
JAVA多线程基础 之一
线程和进程的区别进程是所有线程的集合,每一个线程是进程中的一条执行路径。为什么使用多线程提高程序效率。多线程使用场景迅雷多线程下载、数据库连接池、分批发送短信等多线程创建方式(三种)第一种实现Runnable接口,重写run方法class Thread001 implements Runnable{ @Override public void run...原创 2019-05-22 08:41:05 · 226 阅读 · 0 评论 -
JAVA多线程基础 之十一 并发队列Queue
并发队列Queue在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能非阻塞队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。下面这张图是 Java 并发类库提供的各种各样的线程安全队列实现,注意,图中并未将非线程安全部分包含进来。Queue 阻塞队列与非阻塞队列阻塞队列与普通队列的区别在...原创 2019-05-23 11:30:36 · 3785 阅读 · 0 评论 -
JAVA多线程基础 之十 CopyOnWrite容器
定义:CopyOnWrite机制称为写时复制,理解起来很简单,就是执行修改操作时进行底层数组复制,使得修改操作在新的数组上进行,不妨碍原数组的并发读操作,复制修改完成后更新原数组引用变量。原理每个修改之前都加上ReentrantLock使并发写操作互斥执行,避免多次数据复制修改。所以能够实现读写分离,但是写写同步执行。读写并发环境中,在将原数组对象引用变量更新为复制修改完成后的数组对象...原创 2019-05-22 10:45:15 · 388 阅读 · 0 评论 -
JAVA多线程基础 之九 CountdownLatch&CyclicBarrier&Semaphore的使用
CountdownLatchCountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。...原创 2019-05-22 10:43:54 · 315 阅读 · 0 评论 -
ConcurrentHashMap源码解读
ConcurrentHashMap源码解读JDK1.7及之前锁分段技术HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHas...原创 2019-05-22 10:40:28 · 275 阅读 · 0 评论 -
JAVA多线程基础 之七 同步类容器与并发类容器
同步类容器:为什么会有同步类容器?在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。像ArrayList、LinkedL...原创 2019-05-22 10:36:41 · 294 阅读 · 0 评论 -
JAVA多线程基础 之六 多线程间通信
wait与notify使用wait和notify方法实现线程间的通信(属于Object的方法)必须配合synchronized关键字使用。wait方法释放锁,notify方法不释放锁。public class WaitNotifyTest {// 在多线程间共享的对象上使用wait private String[] shareObj = { "true" };...原创 2019-05-22 10:31:07 · 274 阅读 · 0 评论 -
JAVA多线程基础 之五 线程安全的相关概念 java 中的锁 -- 偏向锁、轻量级锁、重量级锁、自旋锁
理解锁的基础知识如果想要透彻的理解java锁的来龙去脉,需要先了解以下基础知识。基础知识之一:锁的类型锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,...原创 2019-05-22 10:04:53 · 270 阅读 · 0 评论 -
JAVA多线程基础 之四 线程安全的相关概念 AQS
AQS (AbstractQueuedSynchronizer)类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。框架它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进...原创 2019-05-22 10:02:51 · 253 阅读 · 0 评论 -
JAVA多线程基础 之三 线程安全的相关概念(JAVA内存模型&ThreadLocal&Atomic类&死锁&重排序)
线程安全的相关概念JAVA内存模型共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的...原创 2019-05-22 08:53:20 · 431 阅读 · 0 评论 -
JAVA多线程基础 之二 什么是线程安全及解决办法
什么是线程安全?保证线程安全需要保证几个基本特性:原子性:相关操作不会被其他线程所打扰,一般通过同步机制实现。 可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓。通常被解释为将线程本地状态反映到主内存上,volatile就是负责保证可见性的。 有序性:保证线程内的串行语义,避免指令重排等。线程安全解决办法?内置的锁(synchronized)Java提供...原创 2019-05-22 08:48:18 · 264 阅读 · 0 评论 -
JAVA多线程基础 之十一 线程池
什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系...原创 2019-05-23 11:31:02 · 374 阅读 · 0 评论