Java多线程全面解刨
文章平均质量分 81
piaoslowly
这个作者很懒,什么都没留下…
展开
-
java多线程高级-AQS(三)
java多线程高级-AQS(三) 前面第一章介绍了锁的结构,现在介绍java里面的java.util.Concurrent包的里面的基石,AQS。什么是AQS?AbstractQueuedSynchronizer(后面简称AQS)AQS是JDK1.5提供的一个基于FIFO等待队列实现的一个用于实现同步器的基础框架,这个基础框架的重要性可以这么说,JUC(java.util.C...原创 2018-08-10 14:02:07 · 556 阅读 · 0 评论 -
java多线程-下载文件及断点续传(番外篇)
java多线程-下载文件及断点续传(番外篇)最主要的还是了解到了,网络资源可以分段下载: conn.setRequestProperty(“Range”,”bytes=”+startIndex+”-“+endIndex);//设置请求资源大小 int code=conn.getResponseCode(); if(code==206){//从服务器请求全部资源200,请求部分资源为206...原创 2018-08-07 10:06:09 · 628 阅读 · 0 评论 -
java多线程-单例模式(sing)的四种实现方式
java多线程-单例模式(sing)的四种实现方式单例模式保证了该类只会被实例化一次。在数据库链接,读取配置文件链接经常会使用到。下面来看看三种单例的实现。1.懒汉模式,在使用时才会被实例化。public class SignTest { public static volatile SignTest signTest=null; private SignTest...原创 2018-08-07 10:07:09 · 733 阅读 · 0 评论 -
java多线程高级-思维导图(一)
java多线程高级-思维导图(一)在计算机界中锁无非就四种,实现大都通过操作系统,或者硬件cpu本身来做的加锁。 锁无非就4种:信号量,互斥,临界区,事件。java线程安全实现思维导图四种线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控...原创 2018-08-07 10:08:00 · 2186 阅读 · 0 评论 -
java多线程高级-CAS原理(转)(二)
java多线程高级-CAS原理(转)(二) CAS没有自己实现,所以只能看看理论文章,实在写不出自己的心得,所以直接copy转载了,不过文章中有部分错误,long,double本身不具有原子性,但是jvm提供了原子性操作,所以在定义long类型时无需添加volatile。锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次...原创 2018-08-07 10:08:36 · 1174 阅读 · 0 评论 -
java 并发队列-前言(一)
java 并发队列-前言(一)JDK为我们提供了一系列多线程安全的队列. 按实现方式的不同可以分为阻塞队列和非阻塞队列.阻塞与非阻塞队列先来看一组类图:阻塞队列:非阻塞队列:从上面的类图可以看出,阻塞与非阻塞就在于是否实现了BlockingQueue这个接口.这个是一个阻塞队列接口.来看一下Queue类的基本方法:add:增加一个元索,一般来说都是直接调用offer()方...原创 2018-12-13 18:49:43 · 237 阅读 · 0 评论 -
java 并发队列之ArrayBlockingQueue(二)
java并发队列之ArrayBlockingQueue(二)ArrayBlockingQueue是一个用数组实现的有界阻塞并发安全队列.demo实战public class ArrayBlockingQueueDemo { public static void main(String[] args) { //队列总长度为10. final Blocki...原创 2018-12-13 18:50:04 · 293 阅读 · 0 评论 -
java并发队列之LinkedBlockingQueue(三)
java并发队列之LinkedBlockingQueue(三)LinkedBlockingQueue是一个用单链表实现的有界阻塞并发安全队列.实战public class ArrayBlockingQueueDemo { public static void main(String[] args) { final BlockingQueue<String...原创 2018-12-13 18:50:21 · 800 阅读 · 0 评论 -
java并发队列之优先级队列PriorityBlockingQueue(四)
java并发队列之优先级队列PriorityBlockingQueue(四)PriorityBlockingQueue是一个数组实现的带优先级无阻塞队列并发安全队列.实战import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ArrayBlockingQueueDemo { public static void main(St...原创 2018-12-13 18:50:39 · 884 阅读 · 0 评论 -
java并发队列之延时队列DelayQueue(五)
java并发队列之延时队列DelayQueue(五)DelayQueue这是一个无界的延时阻塞队列. DelayQueue内部是使用优先级队列PriorityQueue实现的,使用时间来做优先级的延时阻塞队列DelayQueue = BlockingQueue + PriorityQueue + Delayed实战import lombok.extern.slf4j.Slf4j;...原创 2018-12-13 18:50:59 · 3515 阅读 · 0 评论 -
java并发队列之非阻塞队列ConcurrentLinkedQueue(七)
java并发队列之非阻塞队列ConcurrentLinkedQueue(七)ConcurrentLinkedQueue是一个非阻塞,无界的高并发队列.底层数据结构使用单链表来实现,出队和入队操作使用CAS来实现线程安全.从图中可以看出非阻塞队列和阻塞队列非常像,只是非阻塞队列并未实现BlackingQueue接口.实战public class ConcurrentLinkedQueu...原创 2018-12-14 16:14:50 · 523 阅读 · 0 评论 -
java并发队列之总结(八)
java并发队列之总结(八)JDK为我们提供了一系列多线程安全的队列. 按实现方式的不同可以分为阻塞队列和非阻塞队列.阻塞与非阻塞队列先来看一组类图:阻塞队列:非阻塞队列:从上面的类图可以看出,阻塞与非阻塞就在于是否实现了BlockingQueue这个接口.这个是一个阻塞队列接口.来看一下Queue类的基本方法:add:增加一个元索,一般来说都是直接调用offer()方法...原创 2018-12-14 16:15:14 · 395 阅读 · 0 评论 -
java多线程-SimpleDateFormat不安全(九)
java多线程-SimpleDateFormat不安全(九)在平常的工作中,我们经常会用到SimpleDateFormat这个类来做日期转换,但是要注意它在多线程下面是不安全的。 simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);不安全代码测试:package cn.thread.first.unsafe;i...原创 2018-08-07 10:04:54 · 5364 阅读 · 2 评论 -
java多线程-Lock(八)
java多线程-Lock(八) 多线程使用synchronized来保持线程之间同步互斥,jdk1.5中加入了Lock对象也能实现同步效果 ReentrantLock(rɪ’entrənt)类的使用 ReentrantReadWriteLock类的使用ReentrantLockjava.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象...原创 2018-08-07 10:04:23 · 5157 阅读 · 0 评论 -
java多线程-volatile(六)
java多线程-volatile(六) 在jvm的内存模型中也有讲到过,这里希望单独拿出来再讲一遍,加强理解volatile变量规则volatile赋予了变量可见——禁止编译器对成员变量进行优化,它修饰的成员变量在每次被线程访问时,都强迫从内存中重读该成员变量的值;而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存,这样在任何时刻两个不同线程总是看到某一成员变量的同一...原创 2018-08-07 10:03:04 · 522 阅读 · 0 评论 -
java多线程高级-线程中断/阻塞(四)
java多线程高级-线程中断/阻塞(四)线程中断/阻塞:interrupt/LockSupport 在Core Java中有这样一句话:”没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 “。线程中断-interrupt简单定义 每个线程都有一个interrupt status标志位,用于表明当前...原创 2018-08-10 14:03:09 · 1057 阅读 · 0 评论 -
java多线程高级-concurrent实战(五)
java多线程高级-concurrent实战(五)Semaphore信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可. Semaphore sema = new Semaphore(5); 这里申请了5个信...原创 2018-08-10 14:03:41 · 304 阅读 · 0 评论 -
java多线程高级-concurrentHashMap(六)
java多线程高级-concurrentHashMap(六) 这里写的文字较少,因为它和HashMap原理是一样的,只不过在HashMap外面又套了一层数组而已,所以只分析下源码的分段锁实现。ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组,...原创 2018-08-10 14:04:13 · 2022 阅读 · 0 评论 -
java多线程高级-线程池原理(七)
java多线程高级-线程池原理(七)为什么要使用线程池? 我们现在考虑最简单的服务器工作模型:服务器每当接收到一个客户端请求时就创建一个线程为其服务,10个客户端就需要创建10个线程为其服务。 实际上会存在一些缺陷,服务器应用程序中经常出现的情况是单个客户端请求处理的任务本身很简单但客户端请求的数目却是巨大的,因此服务器在线程的创建和销毁上所花费的时间和系统资源可能比处理客户端请求处理的任务...原创 2018-08-10 14:04:48 · 270 阅读 · 0 评论 -
java多线程高级-FutureTask与Callable(八)
java多线程高级-FutureTask与Callable(八)平时在工作中一般用到的多线程为:一种是直接继承Thread,另外一种就是实现Runnable接口,但是有时我们希望多线程执行完后返回结果,那就使用FutureTask与Callable。FutureTask从图中可以看出,FutureTask只是一个实现了Runnable的一个普通类,没什么特别的,唯一多了一个Fu...原创 2018-08-10 14:05:23 · 334 阅读 · 0 评论 -
关于多线程中的面试题
关于多线程中的面试题常见面试的1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 答:使用join就OK了。public class ThreeThread { public static void main(String[] args) throws InterruptedException { OneT...原创 2018-08-10 14:15:57 · 7335 阅读 · 0 评论 -
java多线程-进程与线程(一)
java多线程-进程与线程(一)进程进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值...原创 2018-08-06 19:42:27 · 266 阅读 · 0 评论 -
java多线程-线程安全与锁优化(二)
java多线程-线程安全与锁优化(二)线程安全如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 ...原创 2018-08-06 19:43:00 · 211 阅读 · 0 评论 -
java多线程-Thread,Runnable的实现(三)
Date: 2017-04-12 10:10:17java多线程-Thread,Runnable的实现(三)java需要实现多线程的方法有两种: 继承Thread,或者实现Runnabel接口。 Threadpackage cn.thread.first.thread;class MyThread extends Thread { private in...原创 2018-08-07 09:59:57 · 155 阅读 · 0 评论 -
java多线程-synchronized实现(四)
java多线程-synchronized实现(四)synchronized同步Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。 从语法上讲,Synchronized总共有三种用法: (1)修饰普通方法 ...原创 2018-08-07 10:02:14 · 284 阅读 · 0 评论 -
java多线程-synchronized原理(五)
java多线程-synchronized原理(五)synchronized其应用层的语义是可以把任何一个非null对象作为”锁”。 Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的...原创 2018-08-07 10:02:38 · 288 阅读 · 0 评论 -
java并发队列之SynchronousQueue(六)
java并发队列之SynchronousQueue(六)SynchronousQueue是一个只有一个元素的同步阻塞队列,不存在无界有界问题.生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。内部使用CAS乐观锁来实现的.写不动了,就参考下面两篇也够用了.http://ifeve.com/java-synchronousqueue/https://www...原创 2018-12-14 16:15:46 · 545 阅读 · 0 评论