![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
sinat_37138973
这个作者很懒,什么都没留下…
展开
-
Java中的锁(四)
Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需转载 2017-02-15 16:23:29 · 517 阅读 · 0 评论 -
Java并发机制的底层实现原理(二)
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行。Java中所使用的并发机制依赖于JVM的实现和CPU的指令。2.1 volatile的应用1.volatile的定义与实现Java编程允许线程访问共享变量,为了确保共享变量能被准备和一致地更新,线程应该确保通过排他锁单独获得这个变量。如果一个字段被声明为volatile,转载 2017-02-06 11:13:34 · 1252 阅读 · 0 评论 -
并发编程的挑战(一)
1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给每个线程的时间,因为时间片非常短,说以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保转载 2017-02-06 10:34:25 · 469 阅读 · 0 评论 -
关于Java并发编程的总结和思考
转自:http://blog.csdn.net/jackfrued/article/details/44499227并发编程的原则和技巧单一职责原则分离并发相关代码和其他代码(并发相关代码有自己的开发、修改和调优生命周期)。限制数据作用域两个线程修改共享对象的同一字段时可能会相互干扰,导致不可预期的行为,解决方案之一是构造临界区,但是必须限制临界区的数量。使...转载 2017-06-29 18:31:35 · 231 阅读 · 0 评论 -
Java并发编程实践(十)
生产者和消费者模式在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生 产线程和消费线程的工作能力来提高程序整体处理数据的速度。 什么是生产者和消费者模式 生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要转载 2017-04-10 18:33:12 · 239 阅读 · 0 评论 -
Executor框架(九)
Java的线程既是工作单元,也是执行机制。从JDK5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。Executor框架介绍Executor框架的两极调度模型在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当该Ja转载 2017-04-10 18:24:11 · 409 阅读 · 0 评论 -
Java中的线程池(八)
线程池的实现原理1)线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。2)线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。3)线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和转载 2017-03-13 18:01:22 · 316 阅读 · 0 评论 -
Java中的并发工具类(七)
等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。在这个需求中,要实现主线程等待所有线程完成sheet的解析操作,最简单的做法是使用join()方法,如下转载 2017-03-13 16:09:54 · 308 阅读 · 0 评论 -
Java中的13个原子操作类(六)
Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。因为变量的类型有很多种,所以在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic包里的类基本都是使转载 2017-03-08 15:56:51 · 363 阅读 · 0 评论 -
Java并发容器和框架(五)
ConcurrentHashMap的实现原理与使用为什么要使用ConcurrentHashMapHashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获 取Entry。HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Hash转载 2017-02-22 16:00:55 · 596 阅读 · 0 评论 -
Java并发编程基础(三)
3.1 线程简介3.1.1 什么是线程现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线层都拥有自己的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉线程在同时转载 2017-02-10 15:34:43 · 324 阅读 · 0 评论