java多线程基础
清风不灭
这个作者很懒,什么都没留下…
展开
-
java并发集合
非阻塞式集合(Non-Blocking Collection) 这类集合也包括添加和移除数据的方法。如果方法不能立即被执行,则返回null或抛出异常,但是调用这个方法的线程不会被阻塞。ConcurrentLinkedDeque常用方法1、add(E e):在此deque的尾部插入指定的元素,返回值为Boolean。2、addFirst(E e):在此deque前面插入指定的元...原创 2020-03-08 19:03:32 · 487 阅读 · 0 评论 -
并发工具——Semaphore
Semaphore的使用和操作系统中的信号量的使用差不多,可以类比去理解。Semaphore用于限制可以访问某些资源(物理或逻辑的)的线程数目,他维护了一个许可证集合,有多少资源需要限制就维护多少许可证集合,假如这里有N个资源,那就对应于N个许可证,同一时刻也只能有N个线程访问。一个线程获取许可证就调用acquire方法,用完了释放资源就调用release方法。停车场案例代码实现:p...原创 2020-03-08 16:57:27 · 158 阅读 · 0 评论 -
CyclicBarrier
CyclicBarrier是让一组线程达到一个屏障(也叫做同步点),当这一组线程执行到达这个屏障(cyclicBarrier.await()代码处)时,这组线程才会继续往下执行。CyclicBarrier比较适用于多线程计算的场景,当这些线程都执行到某一个预设地点以后,再执行另外的操作。例如,开多个线程批量处理数据,多所有数据都处理完成后再进行汇总分析的场景。CyclicBarrier和之...原创 2020-03-07 01:38:03 · 145 阅读 · 0 评论 -
CountdownLatch详解
文章转载自:https://segmentfault.com/a/1190000016508108CountdownLatchCountDownLatch本身是基于共享锁实现的,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景CountDown是倒数计数,所以CountDownLatch的用法通常是设定一个大于0的值,该值即代表需要等待的总任务数,每完成一个任务后,将总任...转载 2020-03-07 01:04:30 · 10786 阅读 · 0 评论 -
AQS
目录一、CLH同步队列二、手动模拟AQS锁三、可重入锁ReentrantLock四、ReentrantLock 和synchronize异同一、CLH同步队列参考:https://blog.csdn.net/weixin_40391011/article/details/104701988二、手动模拟AQS锁state可以理解为信号量public cla...原创 2020-03-06 22:30:27 · 145 阅读 · 0 评论 -
CLH同步队列
文章转载自:https://blog.csdn.net/chenssy/article/details/60781148AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列...转载 2020-03-06 18:49:27 · 12781 阅读 · 0 评论 -
CAS
一、CAS概述CAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可...原创 2020-03-06 17:53:48 · 787 阅读 · 0 评论 -
java进程间的通信
一、相关方法介绍wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。 notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。说明:wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。 wa...原创 2020-01-27 09:49:53 · 558 阅读 · 0 评论 -
java线程同步
目录一、实现Runnable接口的线程同步问题二、继承Thread类的线程同步问题三、同步方式优缺点一、synchronized实现Runnable接口的线程同步问题方式一:同步代码块synchronized(同步监视器){ //需要被同步的代码放在此处}说明:1、操作共享数据的代码块,即为需要被同步的代码。 2、共享数据(临界...原创 2020-01-25 22:16:48 · 449 阅读 · 0 评论 -
Thread和Runnable的区别以及联系
多线程的创建方式 方式一:继承于Thread类 1. 创建一个继承于Thread类的子类 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()中 3. 创建Thread类的子类的对象 4. 通过此对象调用start()方式二:实现Runnable接口 1. 创建一个实现了R...原创 2020-01-25 18:08:40 · 570 阅读 · 0 评论 -
Thread类常用方法以及线程优先级
Thread常用方法start():启动当前线程;调用当前线程的run()方法。 run():通常情况下需要重写Thread类中的词方法,将创建的线程要执行的操作声明在此方法中。 currentThread():静态方法,返回执行当前代码的线程。 yield():线程让步。暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程;若队列中没有同优先级的线程,忽略此方法。 join...原创 2020-01-25 15:40:05 · 482 阅读 · 0 评论 -
java线程生命周期以及start方法剖析
一、线程生命周期二、start方法剖析一个Thread实例只能执行一次start方法,否则会出现IllegalThreadStateException异常。 当调用一个线程start方法时,此时至少有两个线程在运行,一个是调用者进程,一个是运行run方法的进程。 创建线程时,重写的是run方法,为什么执行的却是 t.start()?...原创 2020-01-14 22:52:19 · 355 阅读 · 0 评论 -
java多线程的创建
代码如下,比较简单,需要注意的几个要点是:在没有调用 start() 之前,new Thread() 只是一个简单的java实例,不能称为线程; 调用start()后会立即返回,不会阻塞。public class TryConcurrency { public static void main(String[] args) { new Thread("readFr...原创 2020-01-14 18:37:09 · 138 阅读 · 0 评论