多线程
Fly_Fly_Zhang
初学java
展开
-
多线程-进程与线程详解
目录:什么是进程什么是线程线程的好处进程与线程的关系进程与线程的区别java中的main方法是进程还是线程java内存模型(JMM ( java Memory Model ))多线程编程的好处java线程与操作系统之间的关系进程间通信:共享内存原理虚拟地址空间用户空间和内核空间进程间的通信方式什么是进程:进程是操作系统资源分配的单位。如:I/O资源,内存资源等;...原创 2019-03-30 18:56:43 · 505 阅读 · 0 评论 -
多线程-线程按照特定顺序轮询打印
题目:编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次,要求输出结果必须按照ABC的顺序显示,如:ABCABCACB…方法一:指定线程唤醒轮循打印,使用ReentrantLock和Condition。本方法空间开销较大,因为使用了三个条件对象,但是本方法是定点唤醒线程,并不会产生额外的上下文切换开销。总体来说,本方法性能更优。package T...原创 2019-05-20 09:45:23 · 1001 阅读 · 0 评论 -
线程池-Executor框架概述及ThreadPoolExecutor源码详解
为什么要有线程池:降低资源消耗,通过重复利用已创建的线程来降低线程创建和销毁造成的损耗。提高响应速度。当任务到达时,任务可以不需要等待线程创建就能直接执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建线程,不仅会消耗系统资源,而且会降低系统的稳定性,适用线程池可以统一分配,调优和监控。线程池类的继承关系:Executor:(Executor框架,线程池所有实现类都实现了它的...原创 2019-05-08 17:42:10 · 386 阅读 · 0 评论 -
多线程-死锁定位以及如何避免死锁(银行家算法)
什么是死锁:死锁是指两个或两个以上线程在执行过程中,由于竞争资源而造成的阻塞问题,若无外力作用下,他们将无法推荐下去,此时系统处于死锁状态。死锁的危害:导致程序得不到正确的运行结果:因为程序产生死锁,发生阻塞,不会继续向下执行。浪费资源:产生死锁,最少有两个线程会发生阻塞。产生新的死锁:产生死锁的线程会一直占有锁资源,会导致其它尝试获取该锁的线程也发生死锁,产生多米诺效应。死锁产生...原创 2019-04-28 18:26:38 · 1899 阅读 · 0 评论 -
多线程-BlockingQueue(ArrayBlockingQueue/LinkedBlockingQueue)源码详解
BlockingQueue(阻塞队列)应用场景:BlockingQueue即阻塞队列是一种将ReentrantLock应用比较精彩的一种表现,它最经典的应用就是实现生产者与消费者模式 ;BlockingQueue接口特点:不接受null元素,当添加一个null元素时,会抛出NullPointerException异常可以限定容量实现主要用于生产者-消费者队列线程安全的,所有排队方...原创 2019-04-23 17:52:18 · 476 阅读 · 0 评论 -
多线程-Executor和几种线程中断操作
Executor(执行器):Executor管理多个异步任务的执行,无需程序员显示地管理线程地生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。主要有三种Executor:**CachedThreadPool原创 2019-04-18 17:31:22 · 653 阅读 · 0 评论 -
多线程-ReentrantLock源码分析(公平锁和非公平锁)
什么是公平性锁:按照线程请求锁的顺序来获取锁。什么是非公平性锁:获取锁的线程不是按照先来后到的顺序获取,而是抢夺式获取锁。ReentrantLock源码分析:继承关系:ReentrantLock实现了Lock接口。该接口提供了一些通用的加锁解锁操作。void lock(): 加锁操作,得不到则阻塞直至得到锁。void lockInterruptibly() throws Int...原创 2019-04-23 12:23:45 · 581 阅读 · 0 评论 -
多线程-ReentrantLock(可重入锁)与synchronized比较
可重入锁新特征:可中断响应;锁限时操作;公平锁;非公平锁;结合Condition使用;继承关系:Lock定义了锁的接口规范。ReentrantLock实现了Lock接口。AbstractQueuedSynchronizer中以队列的形式实现线程之间的同步。ReentrantLock的方法都依赖于AbstractQueuedSynchronizer的实现。sync是在Re...原创 2019-04-18 14:46:00 · 481 阅读 · 0 评论 -
多线程-AbstractQueueSynchronizer源码详解 (AQS独占锁同步的实现)
什么是公平性锁:按照线程请求锁的顺序来获取锁。什么是非公平性锁:获取锁的线程不是按照先来后到的顺序获取,而是抢夺式获取锁。AbstractQueueSynchronizer(AQS)源码分析:基于FIFO(先进先出)队列,用于构建锁或者其它相关同步装置的基础框架。AQS的功能可以分为两大类:独占功能和共享功能它的所有子类中,要么实现并使用了它独占功能的API,要么使用了共享锁的功能,而...原创 2019-04-22 21:05:29 · 318 阅读 · 0 评论 -
多线程-ConcurrentHashMap源码详解
概述:HashMap是集合中最常用的数据结构之一,由于HashMap非线程安全,因此不能用于并发访问场景。在jdk1.5之前,通常使用HashTable作为HashMap的线程安全版本。HashMap对读写操作进行全局加锁,在高并发的条件下会造成严重的锁竞争和等待,极大地降低了系统的吞吐量。优点:相比于HashTable以及Collections.synchronizedMap(),Conc...原创 2019-04-26 17:36:01 · 1527 阅读 · 5 评论 -
多线程-锁分类/锁优化(升级)以及锁对比
什么是锁池:假设线程A已经拥有了某个对象(不是类)的锁,而其它线程想要调用这个对象的某个synchronized方法或者synchronized块,由于这些线程在进入对象的synchronized方法之前必须获得该对象的锁的拥有权。但是该对象的锁目前正在被线程A拥有,所以这些线程就进入了该对象的锁池中。什么是等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁(...原创 2019-04-14 20:44:08 · 524 阅读 · 0 评论 -
多线程-volatile关键字和synchronized关键字详解
在多线程并发编程中synchronized关键字和volatile关键字都有重要意义,volatile是轻量级的synchronized;加了volatile关键字的变量都属于临界资源;什么是同步:同一时刻只能有一个线程对资源进行访问;什么是临界区?什么是临界资源?临界资源: 是一次 仅允许一个进程(线程) 使用的共享资源。各进程之间采取互斥的方式来访问临界资源。实现共享的资源称为临界资...原创 2019-04-14 12:25:41 · 484 阅读 · 0 评论 -
多线程- Atomic 中的 incrementAndGet与 getAndIncrement 两个方法的区别
int incrementAndGet()以原子方式将当前值加 1。int getAndIncrement()以原子方式将当前值加 1。再进行源代码查看:public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; ...原创 2019-04-20 17:59:26 · 1537 阅读 · 0 评论 -
多线程-线程状态转换图以及线程状态介绍
线程状态转换图:两幅图仅是表现形式不同;线程状态转化图一:线程转换状态图二:线程的几种状态: 新建状态(New):用new语句创建的线程处于新建状态,此时它和其它java对象一样,仅仅在堆中分配了内存。 就绪状态(Runnable):当一个线程对象被创建后,其它线程调用它的start()方法,该线程就进入就绪状态。处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU的使用...原创 2019-04-15 23:43:34 · 1162 阅读 · 0 评论 -
多线程-如何用多线程去并行传输文件
在我们学习IO流时,我们对文件进行传输,其实都是使用的串行传输方式,这种传输方式在传输小文件时性能还是我们可以接受的,但是在传输超大型文件时,这种串行的传输方式就会变得非常低效,因为只有一个线程去抢夺CPU的执行权,其占用的执行时间是非常少的,当我们采用多线程时,其相对的占用CPU执行时间的百分比会提高,也就是CPU会花费更多时间去进行文件传输;如何进行并行传输:在IO流中,有一个Random...原创 2019-04-10 11:35:58 · 3962 阅读 · 0 评论 -
多线程-启动线程的几种方式以及Thread类方法详解
线程之间的执行是相互独立的,哪一个线程优先执行取决于OS的调度线程的创建方式:实现Runnable接口:创建自定义类并实现runnable接口,且实现接口中的run方法;实例化自定义的类;将自定义类的实例作为参数传给Thread类,创建thread实例;调用thread实例的start,启动子线程;普通方式package ThreadDemo;class Thread1 i...原创 2019-03-31 11:15:02 · 1637 阅读 · 0 评论 -
多线程-生产者和消费者模式的四种实现
什么是生产者和消费者模式:生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此并不直接通信,而是通过阻塞队列进行通信,所以生产者生产完数据后不用等待消费者进行处理,而是直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列中获取数据,阻塞队列就相当于一个缓冲区,平衡生产者和消费者的处理能力。wait/notify和synchronized配合实现:生产者...原创 2019-05-29 10:29:41 · 6822 阅读 · 24 评论