多线程
谈胖胖
码农
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程系列---同步工具类(九)
CountDownLatch 同步倒数计数器CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch对象内部存有一个整数作为计数器。调用countDown()方法就将计数器减1,当计数到达0时,则所有等待者会停止等待。计数器的操作是原子性的。常用API构造方法CountDownLatch(int count)构造方法参数指定了计数的次数...原创 2019-05-08 21:41:01 · 4472 阅读 · 1 评论 -
多线程系列---深入剖析volatile关键字(七)
1.volatile关键字的两层语义保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。先看一段代码,假如线程1先执行,线程2后执行://线程1boolean stop = false;while(!stop){ doSomething();} //线程2stop = true;这段...原创 2019-05-08 08:35:24 · 5570 阅读 · 2 评论 -
多线程系列---Atomic包原子类介绍(八)
一、何谓Atomic?Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)在x86平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上...原创 2019-05-08 08:14:10 · 4947 阅读 · 0 评论 -
多线程系列---多线程共享变量(六)
Java中可以通过synchronized、volatile、java concurrent类来实现共享变量的可见性。synchronized实现可见性synchronized 实际上是对访问修改共享变量的代码块进行加互斥锁,多个线程对synchronized代码块的访问时,某一时刻仅仅有一个线程在访问和修改代码块中的内 容(加锁),其他所有的线程等待该线程离开代码块时(释放锁)才有机会进...原创 2019-05-07 21:39:20 · 6046 阅读 · 0 评论 -
多线程系列---线程范围内的共享变量(五)
模拟ThreadLocal类实现:线程范围内的共享变量,每个线程只能访问他自己的,不能访问别的线程。package com.ljq.test.thread;import java.util.HashMap;import java.util.Map;import java.util.Random;/** * 线程范围内的共享变量 * * 三个模块共享数据,主线程模块和AB模...原创 2019-05-07 21:04:18 · 8719 阅读 · 0 评论 -
多线程系列---总结篇之常见问题(高级篇)(十四)
关于 synchronized 关键字的 5 连击1.1 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖...原创 2019-05-10 07:19:46 · 3587 阅读 · 2 评论 -
多线程系列---总结篇之常见问题(十三)
1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支 持,它也是一个很好的卖点。2) 线程和进程有什么区别?线程是进程的子集,一个进程可以有...原创 2019-05-10 06:52:02 · 3671 阅读 · 2 评论 -
多线程系列---总结篇之一张图说明一切(十二)
个人建议:多线程这块对于JAVA程序员是非常重要的,有效的总结可以梳理大家对于多线程的认识,下面是一张图,对JUC相关的类进行了总结,给大家分享一下:...原创 2019-05-10 06:40:33 · 2541 阅读 · 0 评论 -
多线程系列---多线程实现的方式(四)
Executor框架是一种将线程的创建和执行分离的机制。它基于Executor和ExecutorService接口,及这两个接口的实现类ThreadPoolExecutor展开,Executor有一个内部线程池,并提供了将任务传递到池中线程以获得执行的方法,可传递的任务有如下两种:通过Runnable接口实现的任务和通过Callable接口实现的任务。在这两种情况下,只需要传递任务...原创 2019-05-07 09:11:27 · 5053 阅读 · 0 评论 -
多线程系列---多线程实现的方式(三)
JAVA多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个...原创 2019-05-07 08:39:56 · 4421 阅读 · 1 评论 -
多线程系列---内存模型JMM(一)
主内存和工作内存: Java内存模型的主要目标是定义程序中各个变量的访问规则,即在JVM中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程里面的变量有所不同步,它包含了实例字段、静态字段和构成数组对象的元素,但不包含局部变量和方法参数,因为后者是线程私有的,不会共享,当然不存在数据竞争问题(如果局部变量是一个reference引用类型,它引用的对象在Java堆中可被...原创 2019-05-06 20:47:31 · 5348 阅读 · 0 评论 -
多线程系统---并发包下的集合类(十一)
先看一张描述java.util.concurrent包下集合组成结构的类图:下列介绍的集合统一特性:线程安全,支持并发操作非阻塞队列(队列无数据,操作队列产生异常或返回null,不具备等待/阻塞的特色)ConcurrentHashMap:相对于线程安全的HashTable,优势在于HashTable不支持在循环(iterator)中对结构调整(增、删),否则会有ConcurrentM...原创 2019-05-09 08:50:46 · 3808 阅读 · 2 评论 -
多线程系列---阻塞队列(十)
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\处理方式 抛出...原创 2019-05-09 08:24:23 · 2818 阅读 · 1 评论 -
如何写一个死锁程序
线程的同步化可能会造成死锁,死锁发生在两个线程相互持有对方正在等待的东西(实际是两个线程共享的东西)。只要有两个线程和两个对象就可能产生死锁。/** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定o2,睡眠500毫秒 * td1睡眠结束后需要锁定o...原创 2019-07-16 09:20:33 · 2940 阅读 · 0 评论
分享