![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Longtermevolution
人生不要太匆匆,不急,慢慢来吧
展开
-
java中锁 - 总结
参考文章:java中的锁目录公平锁 / 非公平锁可重入锁 / 不可重入锁独享锁 / 共享锁互斥锁 / 读写锁乐观锁 / 悲观锁分段锁偏向锁 / 轻量级锁 / 重量级锁自旋锁公平锁 / 非公平锁公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于Java ReentrantLock而言,通过构造函数指定该锁是原创 2020-10-23 17:43:15 · 151 阅读 · 0 评论 -
详解synchronized与Lock的区别与使用
改天自己总结一下,0715Lock原理和两者之间区别参考文章https://blog.csdn.net/u012403290/article/details/64910926?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCo...原创 2020-07-15 17:41:13 · 198 阅读 · 0 评论 -
java进程间通信的几种方式?对比总结
Alice ---- 介质 ----- Bob通信:端到端对象通过介质进行信息的交互。1、汇总:常见的进程间通信方式管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(半双工:数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。) 有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。命名管道在文件系统中有对应...原创 2020-07-10 14:15:49 · 4472 阅读 · 0 评论 -
java多线程 - ReadWriteLock锁
目录1、ReadWriteLock思想2、ReadWriteLock适用条件3、计数器示例4、小结1、ReadWriteLock思想因为有些场景的数据是多读少写的,对于多读少写的场景,如果加锁太多,反而会降低效率。因此,针对这种读写环境,将读写操作分别加锁。读取的时候,多个线程在没有写入的时候可以同时获得锁;只允许一个线程写入。即:只允许一个线程写入(其他线程既不能写入...原创 2020-04-15 16:01:19 · 137 阅读 · 0 评论 -
java多线程 - ReentrantLock 配合Condition实现多线程协调
目录1、使用Condition配合Lock,实现更灵活的线程同步小结1、使用Condition配合Lock,实现更灵活的线程同步使用ReentrantLock比直接使用synchronized更安全,可以替代synchronized进行线程同步。但是,synchronized可以配合wait和notify实现线程在条件不满足时等待,条件满足时唤醒,用ReentrantLock我...原创 2020-04-15 15:43:54 · 186 阅读 · 0 评论 -
Java多线程 - 可重入锁之ReentrantLock
目录1、可重入锁sychronized的缺陷2、可重入锁ReentrantLock计数器类使用ReentrantLock的示例3、小结1、可重入锁sychronized的缺陷很重; 获取时必须一直等待,没有额外的尝试机制。优点:synchronized是Java语言层面提供的语法,不需要考虑异常。2、可重入锁ReentrantLock顾名思义,Reentra...原创 2020-04-15 15:30:51 · 134 阅读 · 0 评论 -
java多线程 - 使用wait和notify
目录1、多线程协调问题1、1 什么意思?1、2 示例问题解决1)目的2)如何使用wait()方法让线程进入等待状态?3)如何唤醒等待状态的线程?1、3完整示例1、多线程协调问题1、1 什么意思?多线程协调运行的原则就是:当条件不满足时,线程进入等待状态,释放锁; 当条件满足时,线程被唤醒,继续执行任务。1、2 示例问题多线程不...原创 2020-04-15 10:33:03 · 134 阅读 · 0 评论 -
死锁
目录1、java中的可重入锁(不够完全,后期再继续总结)2、死锁1、java中的可重入锁(不够完全,后期再继续总结)概念:JVM允许同一个线程重复获取同一个锁,这种能被同一个线程反复获取的锁,就叫做可重入锁。典型:sychronized锁可重入锁的伴随操作:由于Java的线程锁是可重入锁,所以,获取锁的时候,不但要判断是否是第一次获取,还要记录这是第几次获取。每获取...原创 2020-04-06 15:35:09 · 108 阅读 · 0 评论 -
同步方法的具体 - sychronized方法
目录1、sychronized关键字修饰普通方法实现同步的实例2、sychronized关键字修饰static方法(静态方法)实现同步的实例3、总结4、参考我们知道Java程序依靠synchronized对线程进行同步,使用synchronized的时候,锁住的是哪个对象非常重要。常见的可以使用synchronized修饰this; 修饰static方法; 或者修饰...原创 2020-04-06 11:43:51 · 209 阅读 · 0 评论 -
线程同步
1、为啥需要线程同步?目的:保证代码段的原子性。在变量层面,保证对变量的操作是原子操作:对变量进行读取和写入时,结果要正确,必须保证是原子操作。原子操作:不能被中断的一个或一系列操作。当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。这个时候,有个单线程模型下不存在的问题...原创 2020-04-04 21:28:56 · 184 阅读 · 0 评论 -
守护线程
目录1、为啥需要守护线程 Daemon Thread?2、如何使用守护线程?3、小结1、为啥需要守护线程 Daemon Thread?守护线程是指为其他线程服务的线程。在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出。java程序入口就是由JVM启动main线程,main线程又可以启动其他线程。当所有线程都运行结束时,JVM退出,进程结束...原创 2020-04-04 18:11:23 · 153 阅读 · 0 评论 -
中断线程
1、interrupt()方法如果线程需要执行一个长时间任务,就可能需要能中断线程。中断线程就是其他线程给该线程发一个信号,该线程收到信号后结束执行run()方法,使得自身线程能立刻结束运行。我们举个栗子:假设从网络下载一个100M的文件,如果网速很慢,用户等得不耐烦,就可能在下载过程中点“取消”,这时,程序就需要中断下载线程的执行。中断一个线程非常简单,只需要在其他线程中对目标...原创 2020-04-04 11:59:43 · 289 阅读 · 0 评论 -
Java基础之线程状态
目录1、线程的五种状态2、 线程终止的原因:1、线程的五种状态在Java程序中,一个线程对象只能调用一次start()方法启动新线程,并在新线程中执行run()方法。一旦run()方法执行完毕,线程就结束了。新生 、 就绪 、运行、死亡、阻塞新生 - New:新创建的线程,尚未执行; 运行 - Runnable:运行中的线程,正在执行run()方法的Java代码; 阻塞...原创 2020-04-03 21:53:43 · 124 阅读 · 0 评论 -
乐观锁与悲观锁CAS总结
目录1、悲观锁 + 乐观锁1.1 悲观锁:1.2 乐观锁:1.2.1 乐观锁常见实现方式1.2.2 CAS算法缺点时间:20200329事件:CAS入门,搞清楚原理1、悲观锁 + 乐观锁1.1 悲观锁:思想:共享资源每次只给一个线程使用,其他线程阻塞,用完后再把资源转让给其他线程。白话:数据库层面加锁。总是假设最坏的情况,每次拿数据的时候都认为数据...原创 2020-03-29 13:45:01 · 174 阅读 · 0 评论 -
线程 - 同步 - 并发 - 同步容器和并发容器总结
1、什么是同步容器?同步容器通过synchronized关键字修饰容器保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行。(但注意一点,复合操作不能保证线程安全。举例:A线程第一步获取尾节点,第二步将尾结点的值加1,但在A线程执行完第一步的时候,B线程删除了尾节点,在A线程执行第二步的时候就会报空指针)2、什么是...原创 2020-03-27 17:49:08 · 238 阅读 · 0 评论 -
多线程_插队join
目录故事理解join运行结果写在哪个线程体,当前线程体就被阻塞故事理解joinpackage com.pt.thread;/** * 理解join * @author tyler * */public class Join { public static void main(String[] args) { System.out.println("猪儿和...原创 2020-02-23 12:53:39 · 140 阅读 · 0 评论 -
java_线程状态_终止
目录线程停止两种情况1、自身正常停止2、外部干涉2.1 外部干涉结构体运行结果线程停止两种情况1、自身正常停止自然调用完成,结束线程;2、外部干涉停止不能自身正常停止的线程:比如死循环。方法:提供boolean类型的终止变量,外部干涉。2.1 外部干涉结构体及理解代码加入标识:线程类中 定义 线程体使用的标识; 关联标识:线程体使用该标...原创 2020-02-23 11:24:50 · 142 阅读 · 0 评论 -
java基础_多线程_lambda表达式_简化表达
整体思想:避免匿名内部类定义过多 其实质属于函数式编程的概念推导lambda表达式(用一次)的使用:下面我们来推导一下lambda表达式:以线程为例:首先我们可以使用静态类内部类实现一个线程:/*** lambda表达式 (用于简单的线程体);*/public class LambdaThread { //静态内部类(使用时才会编译,不...原创 2020-01-14 19:15:08 · 268 阅读 · 0 评论 -
模拟龟兔赛跑_理解使用Runable接口实现多线程
人勤快怎么都不会差到哪儿去。。。package com.pt.thread;/** * 模拟龟兔赛跑 * * @author tyler * */public class Racer implements Runnable { private static String winner;// 胜利者 @Override public void run() { ...原创 2020-01-02 15:01:48 · 237 阅读 · 0 评论 -
多线程_创建线程
1、实现方式 2、具体实现方法 3、优势劣势比较实现方式三种方式实现多线程1)继承Thread类创建线程方式一 * 1、创建:继承Thread + 重写run * 2、启动:创建子类对象 + 调用start函数启动(开启线程)package com.pt.thread;/** * 创建线程方式一 * 1、创建:继承Threa...原创 2020-01-02 14:06:49 · 158 阅读 · 1 评论 -
多线程概念
1_概念真正的多线程是同时进行的,并行的;现实中的多线程大多是在很短的时间内切换不同的任务,只是切换时间很短,表象上是同时进行的。2、程序、进程、线程的区别程序是静态的进程,是cpu读取到的程序,是动态的线程,是进程中多开的线程...原创 2020-01-02 13:59:21 · 165 阅读 · 0 评论 -
线程池实操
参考:https://www.jianshu.com/p/87bff5cc8d8c/原创 2020-09-04 15:39:12 · 120 阅读 · 0 评论 -
面试必会 -- 线程池基础
目录1、线程池是啥2、开启线程池3、工作流程线程池执行流程,即对应execute()方法四种拒绝策略1、线程池是啥线程池:简单理解,它就是一个管理线程的池子。它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。 提高响应速度。如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执行,速度肯定慢很多。 重复利用。线程用完,再放回池子,可以达到重...原创 2020-09-04 15:25:17 · 124 阅读 · 0 评论 -
死锁怎么回事,怎么避免
https://zhuanlan.zhihu.com/p/52901228外加自己总结的笔记。原创 2020-09-03 15:27:59 · 94 阅读 · 0 评论