多线程并发
过河的小卒子
这个作者很懒,什么都没留下…
展开
-
Java并发编程实战笔记2.0
1.用锁的最佳实践1.永远只在更新对象的成员变量时加锁 2.永远只在访问可变的成员变量时加锁 3.永远不在调用其他对象的方法时加锁2.信号量模型信号量模型可以简单概括为:一个计数器,一个等待队列,三个方法。init():设置计数器的初始值。down():计数器的值减 1;如果此时计数器的值小于0,则当前线程将被阻塞,否则当前线程可以继续执行。up():计数器的值加...原创 2020-05-11 08:45:07 · 642 阅读 · 0 评论 -
Java并发编程实战笔记1.0
1.并发编程领域可以抽象成三个核心问题:分工、同步和互斥分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。2.并发编程领域问题的产生原因:源头之一:缓存导致的可见性问题 一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。源头之二:线程切换带来的原子性问题 我们把一个或者多个操作在CPU执...原创 2020-05-11 08:44:23 · 564 阅读 · 0 评论 -
Java 并发编程学习笔记(16) ----CompletionService
CompletionService1.1 CompletionService 的功能CompletionService的功能就是以异步的方式,一边产生新的任务,一边处理已完成任务的结果。 CompletionService主要解决一个什么问题呢? Future 接口调用get()方法取得处理的结果,但是这个方法是阻塞性的,如果调用get()方法时,任务尚未执行完成,get方法会一...原创 2019-08-19 14:30:33 · 609 阅读 · 0 评论 -
Java 并发编程学习笔记(15) ----Future 和 Callable
Future 和 Callable1.1 Callable 和 Runnable 的区别1.Callable 接口的call()方法可以有返回值,而Runnable接口的run()方法没有返回值。执行完Callable接口中的任务后,返回值是通过接口进行获得的。2.Callable 接口的call()方法可以声明抛出异常,而Runnale的接口run()方法不可以声明抛出异常。1.2 ...原创 2019-07-31 15:27:18 · 1105 阅读 · 0 评论 -
Java 并发编程学习笔记(13) ----关于ThreadPoolExecutor 线程池构造方法中的各个参数
ThreadPoolExecutor 线程池1.1 线程池构造方法中各个参数的意义/** * Creates a new {@code ThreadPoolExecutor} with the given initial parameters and default thread factory. * * @param corePoolSize the num...原创 2019-06-15 09:00:35 · 700 阅读 · 0 评论 -
Java 并发编程学习笔记(12) ----SingleThreadExecutor的意义
SingleThreadExecutor的意义SingleThreadExecutor内部会创建一个Thread,这个Thread的工作就是从一个队列中取出用户提交的任务进行执行,如果执行过程中发生未受检的异常,singleThreadExecutor会自动重新启动一个线程再继续工作,这一点比自己创建一个线程自己管理轻松很多,也不需要再去维护一个任务队列。线程池管理的线程的几点意义:...原创 2019-06-15 09:00:26 · 1210 阅读 · 0 评论 -
Java 并发编程学习笔记(11) ----Phaser-awaitAdvance(int phase),forceTermination(),isTerminated()
51.awaitAdvance(int phase) 作用:如果传入参数Phase和当前getPhase()方法返回值一样,就在屏障处等待,否则继续向下运行。52.代码package com.lhc.concurrent.phaser.awaitAdvance;import java.util.concurrent.Phaser;public class ThreadA exte...原创 2019-06-01 14:34:10 · 868 阅读 · 0 评论 -
Java 并发编程学习笔记(10) ----Phaser-getPhaser(),onAdvance(),arrive()
1.getPhaser()和onAdvance()方法getPhaser() 获取的是已经到达第几个屏障onAdvance() 在通过新的屏障时被调用;返回true时,取消屏障2.代码package com.lhc.concurrent.phaser.onAdvice;import java.util.concurrent.Phaser;public class MyServi...原创 2019-05-18 09:05:22 · 778 阅读 · 0 评论 -
Java 并发编程学习笔记(9) ----Phaser-arriveAndAwaitAdvice(),arriveAndDeregister()
Phaser 移相器Phaser具有设置多屏障的功能。1.方法arriveAndAwaitAdvice()方法arriveAndAwaitAdvice()的作用与CountDownLatch中的await()方法大体一样。 另一个作用是计数不足时,线程呈阻塞状态,不能继续向下运行。21.方法arriveAndDeregister()使当前线程退出,并且是parties...原创 2019-05-18 09:05:03 · 785 阅读 · 0 评论 -
Java 并发编程学习笔记(8) ----CycliBarrier
CyclicBarrier 的使用1.介绍可以实现屏障等待的功能(阶段性同步),同时可以循环实现要一起做任务的目标。CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到某个公告屏障点,这些线程必须相互等待。2.CyclicBarrier 和 CountDownLatch 的区别:CountDownLatch:一个或多个线程,等待另外一个或多个线程完成某个事情之后...原创 2019-05-13 08:45:00 · 577 阅读 · 0 评论 -
Java 并发编程学习笔记(7) ----CountDownLatch
CountDownLatch 的使用1.介绍此类所提供的功能是判断count计数不为0时则呈wait状态,在屏障处等待它也是一个同步功能的辅助类:给定一个计数,当使用这个CountDownLatch的类的线程判断计数不为0时,则呈wait状态,如果为0则继续运行。2.实现实现等待与继续运行的效果分别需要使用awiat()和countDown()方法来进行。调用await()方法时...原创 2019-05-05 09:21:32 · 563 阅读 · 0 评论 -
Java 并发编程学习笔记(6) ----Exchanger
Exchanger 的使用1.exchange() 方法阻塞的特点此方法被调用后等待其他线程来取得数据,如果没有其他线程取得数据,则一直阻塞等待。代码package com.lhc.concurrent.exchanger.exchange;import java.util.concurrent.Exchanger;public class ThreadA extends T...原创 2019-05-05 09:21:01 · 621 阅读 · 0 评论 -
Java 并发编程学习笔记(3) ----Semaphore-tryAcquire()的使用
tryAcquire()的使用参数使用当前时刻 tryAcquire(int permits) Acquires the given number of permits from this semaphore, only if all are available at the time of invocation. 尝试去从这个信号量获取指定数量的在调用时都是...原创 2019-04-20 09:24:11 · 3602 阅读 · 5 评论 -
Java 并发编程学习笔记(2) ----Semaphore
21.一些其他方法availablePermits()方法,表示返回Semaphore对象中的当前可用许可数,此方法通常用于调试,因为许可数量(通路)可能是实时在改变的。drainPermits()方法可获取并返回立即可用的所有许可(通路)个数,并将可用许可置为0。getQueueLength()获取等待许可的线程个数。hasQueuedThreads()判断有没有线程在等待这个许可...原创 2019-04-20 09:24:32 · 563 阅读 · 0 评论 -
Java 并发编程学习笔记(5) ----Semaphore-使用Semaphore 实现一个多生产者/消费者
多生产者/消费者多个生产者和消费者,同时限制生产者和消费者的数量类Semaphore提供了限制并发线程数的功能,此功能在默认的synchronized中是不提供的。代码/** * 实现生产者消费者模式 * 限制生产者与消费者的数量 */package com.lhc.concurrent.semaphore.repast;import java.util.concurre...原创 2019-04-28 09:02:59 · 735 阅读 · 0 评论 -
Java 并发编程学习笔记(4) ----Semaphore-使用Semaphore 实现一个字符串池
使用Semaphore 实现一个字符串池类SemaPhore可以有效地对并发执行任务的线程数量进行限制,可以用在pool池技术中,可以设置同时访问pool池中数据的线程数量。目的:实现同时有若干个线程可以访问池中的数据,但同时只有一个线程可以取得数据,使用后再放回。代码:package com.lhc.concurrent.semaphore.StringPool;import...原创 2019-04-28 09:02:35 · 553 阅读 · 0 评论 -
Java 并发编程学习笔记(1) ----Semaphore-方法 acquire( int permits ) 和 release( int permits )
Semaphore 信号量-11.方法 acquire( int permits ) 和 release( int permits )方法 acquire( int permits ) 参数作用,及动态添加 permits 许可数量表示每调用一次这个方法,使用几个permit new Semaphore(8) 表示初始化了 8个通路, semaphore.acquire(2) 表示每次线...原创 2019-04-13 11:19:57 · 1777 阅读 · 0 评论 -
Java 并发编程学习笔记(0) ----Semaphore-构造方法
Semaphore 信号量-01.构造方法同步关键类 Semaphorepermits 是允许许可的意思构造方法传入的数字是多少,则同一个时刻,只运行多少个进程同时运行指定代码指定代码就是 在 semaphore.acquire() 和 semaphore.release()之间的代码private Semaphore semaphore = new Semaphore(2);p...原创 2019-04-13 11:16:56 · 999 阅读 · 0 评论