
多线程
文章平均质量分 84
ieflex
读书郎
展开
-
Java多线程再学习,温故知新(一)线程创建方式
线程的生命周期及五种基本状态线程中断处理1.while(!interrupted())2.td.interrupt()创建线程的几种方式1.继承Thread类public class Demo1 extends Thread { public Demo1(String name) { super(name); } @Override public...原创 2019-01-11 16:52:50 · 200 阅读 · 0 评论 -
Java多线程再学习,温故知新(十七)ForkJoin框架详解
ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大任物分割成小任务,最后将小任务聚合起来得到结果。它非常类似于HADOOP提供的MapReduce框架,只是MapReduce的任务可以针对集群内的所有计算节点,可以充分利用集群的能力完成计算任务。ForkJoin更加类似于单机版的MapReduce。多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用CPU资源For...原创 2019-02-11 13:19:51 · 300 阅读 · 1 评论 -
Java多线程再学习,温故知新(十六)提前完成任务FutureTask
FutureTask提前完成任务,与FutureTask相关的类或接口,有Runnable,Callable,Future。Future接口表示异步计算的结果,通过Future接口提供的方法,可以很方便的查询异步计算任务是否执行完成,获取异步计算的结果,取消未执行的异步任务,或者中断异步任务的执行。jdk1.5之后,Java提供了Callable接口来封装子任务,Callable接口可以获...原创 2019-02-09 15:18:21 · 718 阅读 · 0 评论 -
Java多线程再学习,温故知新(十五)Exchanger
ExchangerExchanger可以在两个线程之间交换数据,可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。下面是一个Exchange...原创 2019-02-06 20:35:28 · 242 阅读 · 0 评论 -
Java多线程再学习,温故知新(九)线程之间的通信Condition
ConditionCondition主要是为了在J.U.C框架中提供和Java传统的监视器风格的wait,notify和notifyAll方法类似的功能。JDK的官方解释如下: 条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保...原创 2019-02-02 17:06:11 · 262 阅读 · 0 评论 -
Java多线程再学习,温故知新(十四)Semaphore
Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。...原创 2019-02-05 18:00:37 · 346 阅读 · 0 评论 -
Java多线程再学习,温故知新(十三)CyclicBarrier
CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命...原创 2019-02-05 17:37:12 · 195 阅读 · 0 评论 -
Java多线程再学习,温故知新(十二)CountDownLatch
CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考...原创 2019-02-05 16:58:37 · 252 阅读 · 0 评论 -
Java多线程再学习,温故知新(八)线程之间的通信之wait notify
线程之间的通信 线程通信的目标实际上是线程直接能够互相发送信号,线程在接收到信号后执行特定的逻辑,信号可以是线程直接可见的变量; 也可以说线程直接有一些关联的操作,比如A,B两个线程,B线程需要等A线程执行完毕后在接着执行。 线程实现的方式: 1.使用自旋的方式public class Demo { private volatile i...原创 2019-01-29 14:49:09 · 173 阅读 · 0 评论 -
Java多线程再学习,温故知新(十一)ThreadLocal 使用及实现原理
那么这种情况下使用ThreadLocal是再适合不过的了,因为ThreadLocal在每个线程中对该变量会创建一个副本,即每个线程内部都会有一个该变量,且在线程内部任何地方都可以使用,线程之间互不影响,这样一来就不存在线程安全问题,也不会严重影响程序执行性能。 但是要注意,虽然ThreadLocal能够解决上面说的问题,但是由于在每个线程中都创建了副本,所以要考虑...原创 2019-02-03 17:24:37 · 275 阅读 · 0 评论 -
Java多线程再学习,温故知新(十)线程间的通信join
当一个线程执行时,想调用另外一个线程加塞public class Demo { public void a(Thread joinThread) { System.out.println("方法a执行了..."); joinThread.start(); try { joinThread.join(); } catch (InterruptedException...原创 2019-02-03 16:44:27 · 181 阅读 · 0 评论 -
Java多线程再学习,温故知新(四)Lock
Lock接口的认识与使用Lock可以实现与Synchronized同样的功能,需要显示地获取和释放锁,繁琐能让代码更灵活Synchronized不需要显示地获取和释放锁简单,但是比较重不好控制使用Lock可以方便的实现公平性,以下例子用ReentrantLock实现一个Lock功能 非阻塞的获取锁 能被中断的获取锁 超时获取锁import java.uti...原创 2019-01-18 13:13:59 · 213 阅读 · 0 评论 -
Java多线程再学习,温故知新(三)volatile
线程变量的可见性:一个线程修改了这个变量的值,在另外一个线程中能够读到这个修改后的值。Synchronized除了线程之间互斥意外,还有一个非常大的作用,就是保证可见性,比如以下例子中get和set方法被synchronized关键字修饰,他们两个同时的可见变量是a;synchronized可以保证同一个实例,在多线程的环境下get和set方法操控的变量能保持一致。/** * 保...原创 2019-01-16 17:26:41 · 132 阅读 · 0 评论 -
Java多线程再学习,温故知新(六)公平锁
公平锁公平是针对锁的获取而言的,如果一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序。可以通过控制队列来实现一个公平锁,线程进入队列后,每次都唤醒队列中的第一个线程。公平锁的实现import java.util.ArrayList;import java.util.List;public class FairLock { private boolean isL...原创 2019-01-22 11:29:45 · 147 阅读 · 0 评论 -
Java多线程再学习,温故知新(七)读写锁
排他锁:同一时刻只允许一个线程访问例如synchronized。共享锁:同一时刻可以允许多个读线程进行访问。读写锁:中有既有排他锁也有共享锁,读读操作是共享锁,读写操作和写写操作是排他锁。import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java...原创 2019-01-26 21:41:13 · 221 阅读 · 0 评论 -
Java多线程再学习,温故知新(五)AbstractQueuedSynchronizer(AQS)
JDK在线文档 AbstractQueuedSynchronizer为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。 此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此类中的其...原创 2019-01-21 15:25:20 · 257 阅读 · 0 评论 -
Java多线程再学习,温故知新(二)多线程带来的风险
线程安全性问题1.多线程环境下2.多个线程共享一个资源3.对资源进行非操原子性作public class Sequence { private int value; /** * synchronized 放在普通方法上,内置锁就是当前类的实例 * @return */ public synchronized int getNext() { retur...原创 2019-01-14 11:16:15 · 205 阅读 · 0 评论 -
Actor模式理解与使用
最近学习ThingsBoard,其中大量使用了Actor设计模式,再这里做个Actor模式理解与使用的笔记 Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。 共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难...原创 2019-08-08 19:43:46 · 8679 阅读 · 0 评论