多线程
文章平均质量分 66
猿人小郑
猿人一族,生活在一个虚拟的世界,那里面只有0和1.
展开
-
Java处理多线程并发相关类
自从JDK5发布以来,在java.util.concurrent包中提供了一些非常有用的辅助类来帮助我们进行并发编程,下面就介绍一下这些辅助类中的Semaphore、CyclicBarrier、CountDownLatch以及Exchanger的相关用法。一、Semaphore Semaphore是计数信号量,是操作系统中的一个概念,经常用于限制获取某种资源的线程数量,在new 这个...原创 2018-06-13 11:17:18 · 1605 阅读 · 0 评论 -
Java语言中提供的12个原子操作类
如果程序在多线程的情况下,不考虑线程安全,那么多线程同时操作一个变量时,可能得到期望之外的值。这是因为多线程在没有考虑线程安全的情况下,主内存与工作内存之间的变量值赋值的时候各自操作各自的,导致最终结果不一致,称为线程不安全的操作。通常我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量,但是这样在高并发的情况下,效率特别低下。而Java从J...原创 2018-09-10 10:19:27 · 333 阅读 · 0 评论 -
Java中线程池ThreadPoolExecutor的主要处理流程
Java中线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发的过程中,合理的使用线程池能够带来以下好处:1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。3、提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的...原创 2018-09-10 14:43:24 · 1516 阅读 · 0 评论 -
Java中并行执行任务的框架Fork/Join
Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。Fork/Join的运行流程如下: Fork/Join计算框架的核心是ForkJoinPool这个类,它继承自Abstrac...原创 2018-09-10 17:06:35 · 1005 阅读 · 0 评论 -
Java中的锁之Lock接口
从JDK5开始,并发编程大师Doug Lea加入了Lock接口,为Java语言中的并发处理加入了一股清流,先来认识一下这个接口: 首先要知道锁是来干嘛的?锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功...原创 2018-09-11 10:26:53 · 559 阅读 · 0 评论 -
读写锁ReentrantReadWriteLock:读读共享,读写互斥,写写互斥
JDK1.5之后,提供了读写锁ReentrantReadWriteLock,读写锁维护了一对锁,一个读锁,一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。在读多写少的情况下,读写锁能够提供比排他锁更好的并发性和吞吐量。 从源码中可以看出,读写锁中同样依赖队列同步器Sync(AQS)实现同步功能,而读写状态就是其同步器的同步状态。下面从例子中来说明:读读共享,读写...原创 2018-12-28 10:01:28 · 3169 阅读 · 0 评论 -
Java语言中的无锁化线程安全队列
在并发编程中,有时候需要使用线程安全的队列。对于线程安全的队列,有两种实现方式:一种是阻塞(加锁),一种是非阻塞(无锁)。对于无锁化线程安全队列,实现要基于两个方面:原子性操作和内存访问控制。说的浅显一些,就是在JDK中,需要用到Unsafe类中的CAS操作,结合volatile关键字,来实现无锁化线程安全队列。具有代表性的就是ConcurrentLinkedQueue,当然还有其他的队列,诸...原创 2018-12-28 11:30:38 · 3414 阅读 · 0 评论 -
Thread.join():我不但在你之前执行,并且你还要等我执行完才能执行
Java中的线程提供了一个方法:Thread.join(),从单词上可以看出,是加入的意思。含义就是:如果在线程A的内部调用了线程B的join()方法,需要等到线程B执行完毕,才能继续执行!线程Thread除了提供join()方法外,还提供了join(long millis),join(long millis, int nanos)两个具备超时特性的方法。这两个超时方法,如果线程在给定的时间内...原创 2018-12-29 10:19:01 · 1091 阅读 · 0 评论 -
Java多线程中的等待/通知机制
在Java语言中,任意的对象都有等待/通知的方法,因为这些方法被定义在所有对象的超类java.lang.Object上,对应的方法就是wait()/notify(),具体解释如下:wait():调用该方法的线程会进入WAITING状态,只有等待另外线程的通知或者被中断才会返回,调用wait()方法后会释放对象的锁,并且还提供了超时返回的方法wait(long)和wait(long,int)...原创 2018-12-29 11:38:05 · 1169 阅读 · 0 评论