Java多线程与并发
文章平均质量分 66
MindMrWang
一只程序员
展开
-
多线程编程之InheritableThreadLocal
InheritableThreadLocal的作用: 当我们需要在子线程中使用父线程中的值得时候我们就可以像使用ThreadLocal那样来使用InheritableThreadLocal了。 首先我们来看一下InheritableThreadLocal的jdk源码:package java.lang;import java.lang.ref.*;public class Inheritabl原创 2017-10-17 11:22:01 · 230 阅读 · 0 评论 -
用阻塞队列和线程池简单实现生产者和消费者场景
本例子仅仅是博主学习阻塞队列和后的一些小实践,并不是真正的应用场景!生产者消费者场景是我们应用中最常见的场景,我们可以通过ReentrantLock的Condition和对线程进行wait,notify同通信来实现生产者和消费者场景,前者可以实现多生产者和多消费者模式,后者仅可以实现一生产者,一消费者模式。今天我们就利用阻塞队列来实现下生产者和消费者模式(里面还利用了线程池)。 看过我关...原创 2018-04-18 21:33:22 · 4070 阅读 · 0 评论 -
并发容器和框架之ConcurrentHashMap
了解HashMap的人都知道HashMap是线程不安全的(多线程下的put方法达到一定大小,引发rehash,导致闭链,最终占满CPU),同时线程安全的HashTable效率又令人望而却步(每个方法都进行同步,效率低下),所以在这种情境下为并发而生的ConcurrentHashMap就应运而生! 接下来我们按照以下顺序揭开ConcurrentHashMap的面纱:JDK1.6,1.7的Co...原创 2018-04-12 20:25:36 · 298 阅读 · 0 评论 -
从源码看JDK提供的线程池(ThreadPoolExecutor)
一丶什么是线程池(1)博主在听到线程池三个字的时候第一个想法就是数据库连接池,回忆一下,我们在学JavaWeb的时候怎么理解数据库连接池的,数据库创建连接和关闭连接是一个比较耗费资源的事情,对于那些数量多且时间短暂的任务,会导致频繁获取和释放连接,这样使得处理事务的效率大大降低,多以我们创建一个连接池,里面放了指定数目的连接,当应用需要数据库连接的时候去里面获取,使用完毕后再放到连接池里,这样...原创 2018-04-17 21:07:50 · 226 阅读 · 0 评论 -
深入理解CAS
本文转自:https://blog.csdn.net/mine_song/article/details/70140596 但是好像这个链接也是转载的,我点进去他的链接,发现根本不是那篇文章! 再将我看的那篇文章给的链接给出: 原文连接:http://blog.csdn.net/hechurui/article/details/49508473 如有侵权,请告知,立删! 还有一篇写的Vo...转载 2018-04-12 11:30:18 · 889 阅读 · 0 评论 -
Java中的阻塞队列
一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。 2)阻塞移除:当队列为空时,队列会阻塞(拒绝)移除元素,直到队列里有元素。二丶JDK提供的7个阻塞队列ArrayBlockingQueue:由数组结构组成的有界阻塞队列LinkedBlockingQueu原创 2018-04-14 14:32:12 · 2036 阅读 · 0 评论 -
浅析Java中的Lock和AbstractQueuedSynchronizer
在之前的文章中我也曾经介绍过Lock,像ReentrantLock(可重入锁)和ReentrantReadWriteLock(可重入读写锁),这些所我们在说的时候并没有详细的说明它们的原理,仅仅说明了它们的用法,今天我们就来看一看Java中Lock底层的原理,下一篇文章将分析ReentrantLock和ReentrantReadWriteLock! 以下大概就是我们本篇文章的内容:Lock...原创 2018-03-25 16:46:23 · 221 阅读 · 0 评论 -
Java的LockSupport工具,Condition接口和ConditionObject
在之前我们文章(关于多线程编程基础和同步器),我们就接触到了LockSupport工具和Condition接口,之前使用LockSupport工具来唤醒阻塞的线程,使用Condition接口来实现线程的等待和唤醒和Object方法里面的wait方法和notify方法。接下来我们就LockSupport和Condition进行展开:LockSupportConditionCondition...原创 2018-03-30 11:12:48 · 268 阅读 · 0 评论 -
Java并发之底层实现原理学习笔记
本篇博文将介绍java并发底层的实现原理,我们知道java实现的并发操作最后肯定是由我们的CPU完成的,中间经历了将java源码编译成.class文件,然后进行加载,然后虚拟机执行引擎进行执行,解释为汇编语言,然后转为操作系统指令,然后转为1,0,最后CPU进行识别执行。提到java的并发,我们不由的就会想到java中常见的键字:volatile和synchronized,我们接下来就会从这两原创 2018-01-06 16:24:54 · 468 阅读 · 0 评论 -
多线程编程之ThreadLocal的使用和内在原理
我们知道创建一个类,然后类中包含一个public static变量,可以使得所有线程都可以公用这个变量,即这个变量是共享的。 但是有些时候我们想实现每个线程都拥有自己的变量时就用到了ThreadLocal,叫做线程变量。也就是线程的局部变量。我们看一下ThreadLocal这个类的源码发现: 1.public class ThreadLocal {}是这个类的实现方法,它是一个泛型类,可以存储原创 2017-10-14 12:01:54 · 197 阅读 · 0 评论 -
多线程编程之join()方法(含源码)
在主线程创建并启动子线程,如果子线程需要太长时间,主线程会提前结束,等子线程完成run方法后,子线程结束。 但是有时候我们需要等待子线程完成后再执行主线程。例如:子线程处理一个数据,主线程需要取得这个数据,就需要使用join方法了。package join;public class MyThread extends Thread{ public void run() {原创 2017-10-12 17:41:38 · 431 阅读 · 0 评论 -
多线程编程基础02
停止线程java中有三种方法停止线程:线程正常退出,也就是run方法完成后线程终止。使用stop或者suspend和resume强制终止线程(这些方法已经不推荐使用,使用会产生不可预料的后果)使用interrupt方法中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位置,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取原创 2017-10-12 14:10:56 · 157 阅读 · 0 评论 -
多线程编程之ReentrantReadWriteLock
ReentrantLock是一个完全互斥排他的效果(和synchronized一样),但是这样有的时候会影响效率,就像两个线程同时读取一个数据,这样并不会产生线程不安全,如果使用ReentrantLock则会形成:先读线程一,然后读线程二,但是使用ReentrantReadWriteLock就可以避免这种情况。读读共享:package ReentrantReadWriteLock;import j原创 2017-10-21 11:07:18 · 198 阅读 · 0 评论 -
多线程编程之Lock(ReentrantLock)的使用
在多线程编程中,使用synchronized关键字实现线程的等待和通知,不能够通知特定的线程,所以不够灵活,所以java中还提供了另外一种锁 ReentrantLock(可重入锁),它配合Condition(对象监视器)使用可以实现特定线程的等待和唤醒。package ReentrantLock;import java.util.concurrent.locks.Condition;import原创 2017-10-21 10:57:28 · 246 阅读 · 0 评论 -
多线程编程基础01
最近一直忙着看书,都没写点东西,不是因为懒,而是实在没什么好写的,最近在看:java多线程编程核心技术这本书,这本书确实是一本很好的多线程编程入门的书籍,即使是对于我这种很菜的人也能够读的明白。书看的不是很快,因为里面的代码自己都会认真的跟着敲一遍,然后理解其中的意思,总之还是挺不错的。接下来就来写一下近一周看书的感悟和收获。(书还没看完)进程和多线程的概念:首先讲到进程,什么是进程?我们百度一下原创 2017-09-30 20:12:42 · 228 阅读 · 0 评论 -
多线程编程之线程间的通信——管道通信
上一章节讲了wait/notify通信,这一节我们来探讨使用管道进行通信。 java中提供了IO流使我们很方便的对数据进行操作,pipeStream是一种特殊的流,用于不同线程间直接传送数据。一个线程将数据发送到输出管道,另一个线程从输入管道读取数据。通过管道实现通信不需要借助临时文件这类东西。 java中提供了四个类使得线程间可以通信: 字节流:PipeInputStream,PipedOu原创 2017-10-11 11:29:55 · 2801 阅读 · 1 评论 -
多线程编程之线程间的通信——wait and notify
wait自动释放锁与notify不释放锁的概念。 当执行wait方法后,当前线程进入阻塞队列等待唤醒,唤醒后的线程进入就绪队列,等待cup分配资源。当执行wait方法后,当前线程自动释放锁,进入阻塞队列。package waitLetLockGo;public class Service { public void testMethod(Object lock) {原创 2017-09-30 21:17:25 · 490 阅读 · 0 评论