多线程
文章平均质量分 52
呛水鱼
选择理想,还是面对现实。
展开
-
多线程(一) 了解多线程,以及涉及到的一些基本概念
同步(Synchronous)和异步(Asynchronous) 同步和异步主要用于指对于一次方法的调用过程。同步方法调用开始后,方法者必须等到这一次调用返回后,才能继续后续的操作。异步方法调用开始后,立即返回,方法者可继续开始后续的行为。 并发(Concurrency)和并行(Parallelism) 并发和并行主要用于指多个任务的执行。并发是指多个任务交替执行,实际上可能仍然是串行。而并原创 2018-01-03 16:21:19 · 476 阅读 · 0 评论 -
多线程(二)重入锁
学习过线程相关知识的朋友都应该已经知道,同步控制对于并发控制的重要性,synchronized关键字是最简单的一种控制方法。它决定了一个线程是否可以访问临界区。而Object类中的wait()和notify()/notifyAll()方法也是一些线程之间通信的工具。但是,当我们想更加灵活的区规定何时加锁,何时释放锁时,synchronized就显得力所不及了。这时我们就引入了一个新的概念—重入锁。原创 2018-01-03 16:51:55 · 276 阅读 · 0 评论 -
谈谈对AQS的一些理解
AQS的概念 AQS全称AbstractQueuedSynchronizer,是java并发包中的核心类,诸如ReentrantLock,CountDownLatch等工具内部都使用了AQS去维护锁的获取与释放: AQS内部结构 首先我们可以找到这样一张图: 它描述了其内部是如何维护线程的状态,一起锁的获取。类似于一个阻塞队列,当前持有锁的线程处于head(记住不是在阻塞...原创 2018-07-18 20:40:16 · 4039 阅读 · 0 评论 -
深入理解并发编程中volatile关键字的作用
一、volatile概述 volatile是java并发编程中常用的一个关键字,在某些特定的情况下,开发人员通常用它去实现线程间的通信,而不是使用synchronized和Lock。因为在JVM的概念中,volatile是一种轻量级锁,使用它的消耗会远小于上述两种锁机制。当使用synchronized和Lock时会引起大量的线程上下文的切换。线程上下文切换:当处理机的一个时间片执行完成之时,而当...原创 2018-08-05 12:27:31 · 600 阅读 · 0 评论 -
谈谈ThreadLocal所引发的OOM
一、ThreadLocal简介 ThreadLocal常用于多线程环境下保证线程安全,它和synchronized以及lock略有不同,后两者是通过对访问权限的控制保证线程安全,而前者是通过增多资源的副本,保证当前线程操作自己所持有的副本,而不需要去与其它线程竞争。 二、ThreadLocal内部数据的存储 ThreadLocal将当前线程以及它操作的变量存储于一个ThreadLocalMap结构...原创 2018-09-26 21:05:57 · 1158 阅读 · 0 评论