架构师训练营
惟日孜孜 无敢逸豫
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JAVA 并发编程之十一:同步|异步|阻塞|非阻塞 +AsyncTask+ 非阻塞同步(Wait-free|Lock-free|Obstruction-free)
前言同步(Synchronization):如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步+阻塞: UI Thread + method return;同步+非阻塞: UI Thread + 状态轮询查询;异步(Asynchronization):异步+阻塞:Work Thread + method return异步+非阻塞:Work...原创 2019-04-10 23:39:04 · 566 阅读 · 0 评论 -
JAVA 并发编程之十:线程模型2:Executor框架 + 线程池ThreadPool 的四种类型
前言1. Executor框架包括:Executor,Executors,ExecutorService,CompletionService,Future,Callable,FutureTask等。2. 线程|任务 区别: 实现Runnable的类应该被看作一项任务,而不是一个线程。在Java多线程中我们一定要有一个明确的理解,任务和线程是不同的概念。可以使用线程(Thread)执行任务(...原创 2019-04-10 22:50:51 · 388 阅读 · 0 评论 -
JAVA 并发编程之九:sleep()和wait() 概念 + 区别 + 应用场景
sleep和wait到底什么区别其实这个问题应该这么问——sleep和wait有什么相同点。因为这两个方法除了都能让当前线程暂停执行完,几乎没有其它相同点。wait方法是Object类的方法,这意味着所有的Java类都可以调用该方法。sleep方法是Thread类的静态方法。waitwait是在当前线程持有wait对象锁的情况下,暂时放弃锁,并让出CPU资源,并积极等待其...原创 2019-04-09 23:22:41 · 2027 阅读 · 0 评论 -
JAVA 并发编程之八:ThreadLocal(线程局部变量):概念+原理+使用场景
前言什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。 既然每个 Thread 有自己的实例副本,且其它 Thread ...原创 2019-04-09 23:07:30 · 676 阅读 · 0 评论 -
JAVA 并发编程之七:重入锁ReentrantLock + lock + condition :可选择唤醒特定线程(线程状态控制Type2)
前言:synchronized和ReentrantLock的区别:1. 要注意synchronized同步,假如发生异常,JVM是可以帮我们自动释放锁的;但是lock不可以,我们只能手动释放锁,即使发生异常,jvm也不会自动释放锁。2.synchronized与wait()和notify()/notifyAll()方法结合可以实现等待通知模式;Reentrantlock可以实现同样的功能...原创 2019-04-09 22:56:08 · 432 阅读 · 0 评论 -
JAVA 并发编程之六:线程模型1:生产者-消费者模型 + 四种并发方案实现
前言生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。现在用四种方式来实现生产者消费者模型阻塞队列BlockingQueue的实现阻塞队列,是一种常用的并发数据结构,常用于生产者-消费者模式。 在Java中,有很多种阻塞队列...原创 2019-04-09 22:42:06 · 1370 阅读 · 0 评论 -
JAVA 并发编程之五:同步容器: ConcurrentHashMap/Set +CopyOnWriteArrayList + ArrayBlockingQueue
前言1.支持CAS的数据结构使用场景:避免使用同时锁??:如: AtomicXXX、ConcurrentMap、CopyOnWriteList、ConcurrentLinkedQueue;2. 阻塞队列:a. 在BlockingQueue中,要使用put和take,而非offer和poll。b. 如果要使用offer和poll,也是要使用带等待时间参数的offer和poll。c....原创 2019-03-28 23:29:30 · 460 阅读 · 0 评论 -
JAVA 并发编程之四:Java内存模型+ 线程安全:Atomic(原子性)+Violate(可见性)+有序性+synchronized
前言:线程安全:提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。原子性:Atomic|synchronized 可保证;Atomic实现CAS(乐观锁),synchronized为悲观锁;可见性:Violate|synchronized 可保证;有序性:Violate 可部分保证(禁止指令重...原创 2019-03-28 23:22:41 · 3100 阅读 · 1 评论 -
JAVA 并发编程之三:CountDownLatch(门闩)、CyclicBarrier(栅栏)和Semaphore(信号量) 三种并发策略
在JDK的并发包中已经提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类中提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种手段。1、等待多线程完成的CountDownLatchCountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有...原创 2019-03-28 23:00:44 · 1515 阅读 · 0 评论 -
JAVA 并发编程之二:Object对象中的wait,notify,notifyAll 概念+作用(线程状态控制Type1)
wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态。三个方法都必须在synchronized 同步关键字所限定的作用域中调用,否则会报错java.lang.IllegalMonitorStateException ,意思是因为没有同步,所以线程对对象锁的状态是不确定的,不能调用这些方法。wait 表示持有对象锁的线程A准备释放对象锁权限,释放cp...原创 2019-03-28 22:51:46 · 285 阅读 · 0 评论 -
JAVA 并发编程之一:概述
synchronized 关键字同步方法同步代码块锁的底层实现锁的种类volatile 关键字wait和notifyAtomicXxx 类型组CountDownLatch 门闩锁的重入ReentrantLock同步容器Map/SetListQueueThreadPool&ExecutorExecutorExecutorServiceFutureC...原创 2019-03-27 23:08:32 · 311 阅读 · 0 评论