多线程基础
文章平均质量分 93
Donny程序员
这个作者很懒,什么都没留下…
展开
-
ThreadLocal使用场景和阅读源码
ThreadLocal其实可以理解成每个线程独有的一块区域,线程间不能相互影响的一块区域(其中父子线程可以通过InheritableThreadLocal实现子线程读取父线程ThreadLocal的数据)。于是乎,我搜索了下项目中使用到ThreadLocal的地方。说说用到的几个场景:对象隔离(线程需要一个独享的对象,例如SimpleDateFormat)单线程public class Test { private static SimpleDateFormat sdf = new S原创 2021-05-10 10:16:49 · 165 阅读 · 0 评论 -
Java多线程学习(六)Executor 框架
本文思维导图使用线程池的优点线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。1.**降低资源消耗。**通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.**提高响应速度。**当任务到达时,任务可以不需要的等到线程创建就能立即执行。3.**提高线程的可管理性。**线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,...原创 2019-11-01 15:17:53 · 152 阅读 · 0 评论 -
Java多线程学习(五)Lock锁的使用
Lock接口1.Lock接口介绍锁是用于通过多个线程控制对共享资源的访问的工具。通常,锁提供对共享资源的独占访问:一次只能有一个线程可以获取锁,并且对共享资源的所有访问都要求首先获取锁。 但是,一些锁可能允许并发访问共享资源,如ReadWriteLock的读写锁。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的。JDK1.5之后并发包中新增了Lock接口以...原创 2019-11-01 15:15:59 · 416 阅读 · 0 评论 -
Java多线程学习(四)等待/通知(wait/notify)机制
等待/通知机制介绍while(value=desire){ doSomething();}当两个线程之间存在生产和消费者关系,也就是说第一个线程(生产者)做相应的操作然后第二个线程(消费者)感知到了变化又进行相应的操作。比如像下面的whie语句一样,假设这个value值就是第一个线程操作的结果,doSomething()是第二个线程要做的事,当满足条件value=desire后...原创 2019-11-01 15:14:48 · 136 阅读 · 0 评论 -
Java多线程学习(三)volatile关键字
简介Java中的“volatile关键字”关键字:Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。数据的不一致,要解决这个问题,...原创 2019-10-29 11:06:03 · 146 阅读 · 0 评论 -
Java多线程学习(二)synchronized关键字
简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 10; i++) { ...原创 2019-10-29 11:05:27 · 128 阅读 · 0 评论 -
Java 多线程学习(一)初识多线程
一 进程和线程简介**进程和线程:**进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当前运行的进程线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类...原创 2019-10-29 11:04:52 · 109 阅读 · 0 评论