
Java并发编程系列
文章平均质量分 91
北极星小王子
得之坦然,失之淡然,争之必然,顺义自然
展开
-
Java并发编程(五)Java并发编程基础
线程作为操作系统调度的最小单元,多个线程能够同时执行,这将显著提升程序性能,在多核环境中表现得更加明显。但是,过多地创建线程和对线程的不当管理也容易造成问题。本文将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同的通信方式,最后通过简单的线程池示例以及应用(简单的Web服务器)来串联本文所介绍的内容。一、线程简介1.1、什么是线程现代操作系统在运行一个程序时,会为其创建一...原创 2018-06-21 15:57:55 · 541 阅读 · 0 评论 -
Java并发编程(九)Java中的线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的...原创 2018-06-27 10:57:29 · 325 阅读 · 0 评论 -
Java并发编程(八)Java中的13个原子操作类
当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量i。 而Java从JDK 1.5开始提供了...原创 2018-06-27 10:11:55 · 618 阅读 · 1 评论 -
Java并发编程(三)Java内存模型(上)
一、Java内存模型的基础1.1、并发编程模型的两个关键问题        线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状原创 2018-06-20 11:08:57 · 385 阅读 · 0 评论 -
Java并发编程(七)Java并发容器和框架
一、ConcurrentHashMap的实现原理与使用ConcurrentHashMap是线程安全且高效的HashMap。6.1.1、为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。 (1)线程不安全的HashMap ...原创 2018-06-26 15:27:35 · 348 阅读 · 0 评论 -
Java并发编程(二)Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。本章我们将深入底层一起探索下Java并发机制的底层实现原理。一、volatile的应用...原创 2018-06-19 16:44:01 · 713 阅读 · 0 评论 -
Java并发编程(六)Java中的锁
一、Lock接口        锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchro原创 2018-06-25 11:15:43 · 495 阅读 · 0 评论 -
Java并发编程(一)并发编程的挑战
1.1 上下文切换        时间片指的是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停的切换线程执行,让我们感觉多个线程是同时执行的。 &原创 2018-06-07 22:38:33 · 2546 阅读 · 2 评论 -
Java并发编程(一)Java锁的实现原理
CPU级别:原创 2018-06-07 21:35:31 · 7244 阅读 · 0 评论 -
Java并发编程(四)Java内存模型(下)
一、volatile的内存语义1.1、volatile的特性理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下。class VolatileFeaturesExample { volatile long vl = 0L; // 使用volatile声明64位的long...原创 2018-06-20 17:20:55 · 404 阅读 · 0 评论