java多线程
文章平均质量分 59
三水写代码
你只管努力变得优秀······
展开
-
Java多线程---Phaser
Phaser是Java7新引入的并发API,我们可以将Phaser的概念看成是一个个的阶段, 每个阶段都需要执行的线程任务,任务执行完毕后就进入下一阶段。这里和CyclicBarrier 和CountDownLatch的概念类似, 实际上也确实可以用Phaser代替CyclicBarrier和CountDownLatch。Phaser也是通过计数器来控制, 在Phaser中叫parties, 我们在指定了parties之后, Phaser可以根据需要动态增加或减少parties的值。Phaser常用原创 2021-07-01 16:37:34 · 3483 阅读 · 1 评论 -
java多线程---CyclicBarrier
CyclicBarrier翻译过来也叫栅栏,意思很明显,就是一组线程相互等待,均到达栅栏的时候,再运行,功能与CountDLatch有些相似。CyclicBarrier是可以重复使用的,而之前的CountDownLatch是一次性的。CyclicBarrier允许一组线程相互等待,直到到达某个公共屏障点,屏障点即一组任务执行完毕的时候。CyclicBarrier 与 CountDownLatch的区别CyclicBarrier是可重复使用的, CountDownLatch是一次性的 使用场景, C原创 2021-06-29 12:05:48 · 355 阅读 · 0 评论 -
java多线程---Semaphore
Semaphore(信号量):是一种计数器, 用来保护一个或多个共享资源的访问。 如果线程要访问一个资源就必须先获取信号量。 如果信号量内部计数器大于0, 信号量减1, 然后允许共享这个资源; 否则,如果信号量的计数器等于0, 信号量将会将线程置于休眠状态,直至计数器大于0。注意: 信号量使用完后,必须释放。Semaphore的常用API: // 构造方法 public Semaphore(int permits) { //permits指定计数器大小 sync原创 2021-06-28 16:57:49 · 213 阅读 · 0 评论 -
java多线程——Atomic包下的原子类(无锁操作)
Java多线程中的原子类主要有:基本数据类型操作:AtomicInteger、AtomicLong、AtomicBoolean 数组操作:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray 对象的成员变量操作:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicRefere...原创 2019-04-24 19:52:49 · 1060 阅读 · 0 评论 -
ConcurrentHashMap与HashMap对比(JDK1.7)
HashMap:基于哈希表的 Map 接口的实现,并允许使用 null 值和 null 键。底层数据结构主要有数组和链表。数组存储区间连续,占用内存较多,寻址容易,插入和删除困难。链表存储区间离散,占用内存较少,寻址困难,插入和删除容易。HashMap的最小处理单元是Entry<K,V>,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。...原创 2019-04-28 21:23:25 · 674 阅读 · 0 评论 -
java多线程——线程池简单介绍和使用
线程池的优点1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。 2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池类图结构:Executor接口:其定义了一个接收Runnable对象的方法executor,其方法签名为executor(Runnable command), ExecutorSer...原创 2019-04-18 19:00:28 · 505 阅读 · 0 评论 -
Java多线程(4)--Condition
Condition 将 Object 监视器方法(wait、notify、notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。获取Condition实例:Lock接口中的new...原创 2019-04-15 16:03:23 · 431 阅读 · 0 评论 -
java多线程——ThreadPoolExecutor线程池及实现原理
线程池的核心类ThreadPoolExecutor:线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。ThreadPoolExecutor继承了AbstractExecutorSer...原创 2019-04-22 20:32:12 · 575 阅读 · 0 评论 -
Java多线程——Lock和Synchronized底层原理比较
Lock与Synchronized主要区别:synchronized是Java语言的关键字,因此是内置特性,Lock不是Java语言内置的,Lock是一个接口,通过实现类可以实现同步访问。 synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的...原创 2019-04-17 19:08:49 · 2226 阅读 · 0 评论 -
Java多线程——ConcurrentMap、ConcurrentHashMap
ConcurrentMap是Map的子接口,是高并发下线程安全的Map集合。public interface ConcurrentMap<K, V> extends Map<K, V> { //如果map中已有指定key,返回key对应的value,否则将指定的key-value放入map中 V putIfAbsent(K key, V value)...原创 2019-04-28 21:23:50 · 4062 阅读 · 1 评论 -
ConcurrentHashMap.Segment源码解析
文章来源:https://www.cnblogs.com/wangnfhy/p/4957164.htmlstatic final class Segment<K,V> extends ReentrantLock implements Serializable { /* 1.segment的读操作不需要加锁,但需要volatile读 2.当进行扩容时(调用r...转载 2019-04-26 16:44:19 · 1901 阅读 · 0 评论 -
Java多线程——ArrayBlockingQueue源码解析
ArrayBlockingQueue构造: public ArrayBlockingQueue(int capacity) { this(capacity, false); } //初始化队列,并初始化锁和Condition public ArrayBlockingQueue(int capacity, boolean fair) { ...原创 2019-04-25 20:43:17 · 692 阅读 · 0 评论 -
java多线程——BlockingQueue
BlockingQueue:BlockingQueue继承Queue接口,Queue接口继承Collection接口,所以BlockingQueue实际也是集合的一种。public interface BlockingQueue<E>extends Queue<E>{......}public interface Queue<E>extends C...原创 2019-04-25 19:10:47 · 840 阅读 · 0 评论 -
Java多线程(6)——CountDownLatch
CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDownLatch 的一个有用特性是,它不要求调用countDown() 方法的线程等到计数到达零时才继续,而在所有线程都能通过之前,它只是阻止任何线程继续通过一个await()。构造方法: CountDownLatch(int count) 构造一个用给...原创 2019-04-16 19:50:54 · 648 阅读 · 0 评论 -
Java多线程(3)——Lock
以下是摘自JAVA API文档关于lock和synchronized的一段话:Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关Condition对象。 synchronized 方法或语句的使用提供了对与每个对象相关的隐式监视器锁的访问,但却强制所有锁获取和释放均要出现在一个块结构中:当...原创 2019-04-16 15:17:51 · 398 阅读 · 0 评论 -
java多线程(5)——ReadWriteLock
ReadWriteLock 接口维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。与互斥锁相比,读-写锁...原创 2019-04-15 20:06:42 · 675 阅读 · 0 评论 -
Java多线程(2)---synchronized、wait、notify
Synchronized关键字:synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; ...原创 2019-04-12 12:54:32 · 629 阅读 · 0 评论 -
Java多线程基础(1)
线程的生命周期:新建(New):线程对象创建就绪(Runnable):调用线程对象的start()方法,线程进入就绪状态,等待CPU调用运行(Running):CPU调用就绪状态的线程,开始执行线程阻塞(Blocked):运行状态的线程暂时放弃CPU使用权,停止执行,进入阻塞状态。根据产生阻塞的原因不同,阻塞状态可分为三种: 等待阻塞:运行状态中的线程执行wait()方法...原创 2019-04-11 12:42:30 · 493 阅读 · 0 评论