并发编程
文章平均质量分 86
圣小童
向着目标不断前进
展开
-
【Java内存模型】-JMM简介
计算机内存模型简介大家都了解计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里原创 2017-11-02 01:06:03 · 218 阅读 · 0 评论 -
Java多线程-线程池学习总结
1.使用线程池的原因线程过多会使统性能降低,因为它会导致额外的上下文环境切换开销,甚至导致栈溢出OutOfMemoryError。减少线程创建和销毁的开销,每个工作线程都可重复的使用,执行多个任务;根据系统的能力设置线程的数量,访问线程数量过大造成系统内存的使用率过高;系统响应能力,有效的避免了很多情况下线程的创建所消耗的时间。2.线程池的分类Exe原创 2017-11-21 00:24:16 · 375 阅读 · 0 评论 -
Java多线程-知识点总结
什么是Java内存模型?Java 内存模型是通过各种操作来定义,包括对变量的读/写操作,监视器的加锁和释放操作,以及线程启动和合并操作。JMM为程序中所有的操作定义了一个偏序关系,称之为Happens-Before。要想保证操作B的线程能看到操作A的结果(无论A和B是否在同一个线程中执行),那么在A和B之间必须满足Happens-Before关系。如果两个操作之间缺乏Hap原创 2017-11-21 00:33:09 · 311 阅读 · 0 评论 -
【Java多线程学习】ScheduledThreadPoolExecutor源码解读
背景Timer的优点在于简单易用,但是由于所有的任务都是由同一个线程来调度,因此所有的任务都是串行执行的,同一时间只能有一个任务在执行,在前一个任务的延时都会影响到之后的任务。同时,Timer不会捕获TimerTask的异常,只是简单的停止,这样也肯定会影响到之后任务的执行。当然可以为了完成多线程适应多个Timer,只是这些Timer需要自己来管理,而不是一个框架体系。鉴于原创 2017-12-20 19:49:37 · 508 阅读 · 0 评论 -
【Java并发学习】深入浅出AbstractQueuedSynchronizer
1 从ReentrantLock说起 Java从语言级别支持多线程,用户可以很容易的编写多线程的程序。需要注意的是,当多个线程访问共享资源时,为了保证数据的正确性,需要进行同步。Java提供了synchronized关键字(内置锁),synchronized块和synchronized方法可以用来进行同步。与此同时,java.util.concurrent包中还提供了Reen原创 2017-12-20 21:36:16 · 345 阅读 · 0 评论 -
【Java多线程】之ThreadLocal分析
1.对ThreadLocal的理解ThreadLocal,也叫线程本地变量或线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。我们先来看一个例子:class ConnectionManager { private static Connection connect = null;原创 2017-12-18 21:10:17 · 247 阅读 · 0 评论 -
【Java多线程】Callable、Future与FutureTask的使用
背景java中有两个创建线程的方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通原创 2017-12-18 22:01:35 · 189 阅读 · 0 评论 -
【Java多线程】CountDownLatch、CyclicBarrier和Semaphore使用
1.CountDownLatch的用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕后才能执行,此时就可以利用CountDownLatch来实现这种功能了CountDownLatch类只提供了一个构造器:public CountDownLatch(int coun原创 2017-12-18 22:14:15 · 209 阅读 · 0 评论 -
【Java多线程】ThreadPoolExecutor线程池讲解
背景如果我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的原创 2017-12-19 10:52:09 · 1776 阅读 · 0 评论