![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程
文章平均质量分 85
Li_yizYa
持之以恒
展开
-
Java多线程~谈谈自己对于synchronized、volatile关键字的理解,线程的状态转换以及创建线程的方式
创建一个线程,线程就进入了NEW状态,当调用start方法时,进入RUNNABLE状态,如果调用了wait、join等方法时就进入WAITING、TIMED_WAITING状态,当多个线程竞争同一把锁时,竞争失败的线程进入BLOCKING状态,线程执行完成后,进入TERMINATED状态。这里的轻量级锁是通过CAS实现的,通过CAS检查并更新一块内存,如果更新成功表示加锁成功,如果更新失败,则认为锁被占用,继续自旋式的等待(并不放弃CPU).自旋操作是一直让CPU进行空转,比较浪费CPU资源。原创 2023-03-17 12:18:44 · 490 阅读 · 0 评论 -
Java多线程~synchronized原理以及优化
synchronized的基本特点、实现原理(monitor机制)、JVM对于synchronized的优化“锁升级”:无锁、偏向锁、轻量级锁、重量级锁;synchronized的其他的优化,锁消除与锁粗化原创 2022-09-24 21:58:30 · 519 阅读 · 0 评论 -
Java多线程~CAS的原理及其应用
CAS是乐观锁的一种实现,一个CAS涉及到的操作假设内存中的原数据V,旧的预期值A,要修改的的值B1.比较V与A的值是否相等(Compare)2.如果比较相等,则将B写入V(Swap)3.返回操作是否成功简单的说,CAS就是直接尝试修改变量,再返回修改的结果.比较读和写两个时间点主存中变量的值是否相等,如果相等就把要修改的值写回主存中,如果不相等就不做任何操作,修改成功返回true,修改失败就返回false。原创 2022-09-24 14:16:33 · 743 阅读 · 0 评论 -
Java多线程~常见的锁策略(乐观锁与悲观锁、读写锁、自旋锁、公平锁与非公平锁、可重入锁与不可重入锁)
常见的锁策略:乐观锁与悲观锁、读写锁、自旋锁、公平锁与非公平锁、可重入锁与不可重入锁原创 2022-09-23 22:58:01 · 490 阅读 · 0 评论 -
Java多线程~如何解决线程安全问题(volatile和synchronized)
总结产生线程安全的原因:原子性、可见性、有序性,以及解决线程安全问题的方法(volatile关键字与synchronized关键字).详细介绍两个关键字的用法和作用原创 2022-09-22 23:24:57 · 419 阅读 · 1 评论 -
Java多线程~线程的状态以及状态转移的条件
线程的六种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)、每种状态表示的含义以及状态之间的切换条件,各个状态转换的代码示例原创 2022-09-21 23:12:24 · 285 阅读 · 0 评论 -
Java多线程~常见的锁策略(上)~乐观锁与悲观锁、读写锁、重量级锁与轻量级锁
乐观锁与悲观锁悲观锁乐观锁乐观锁好还是悲观锁好读写锁重量级锁与轻量级锁以悲观的心态看待线程冲突问题,所以每次都加锁操作共享变量。总是假设最坏的情况发生,每次去拿数据的时候都认为其他线程会对其进行修改,因此每次在拿数据的时候都进行上锁操作,这样其他线程想拿到这个数据就会阻塞直到它拿到锁假设数据一般情况下不会发生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突,则返回用户错误的信息,让用户决定应该怎么处理。以乐观的心态看待线程冲突问题,所以每次都不加锁(层序层..原创 2022-06-08 23:20:19 · 217 阅读 · 0 评论 -
Java多线程~什么是线程池?如何创建线程池?你可以自己实现一个线程池吗?
目录什么是线程池?如何创建线程池?普通创建快捷创建手动实现一个线程池什么是线程池?线程池是多线程案例中非常重要的一个部分,线程池的使用可以很好的减少每次启动、销毁线程的损耗.在之前的学习中,接触过字符串常量池以及数据库连接池,根据之前的认识,池的作用就是缓存。线程池,即初始化(new线程池对象的时候)就创建了一定数量的线程,这些创建的线程不断地从阻塞队列中取任务,相当于是消费者。其他线程(生产者)只需要不断提交任务到线程池中。举个例子来解释线程池线程池就相当原创 2022-05-28 23:37:46 · 260 阅读 · 0 评论 -
Java多线程~认识并手动实现一个定时器
目录定时器标准库中的定时器定时器的使用实现一个定时器定时器的构成核心接口schedulemailBox对象扫描器worker线程完整代码代码测试定时器定时器是软件开发中的一个重要组件,类似于一个闹钟,达到一个特定时间后,就执行某个指定好的代码。标准库中的定时器· 标准库提供了一个Timer类,Timer类的核心方法为schedule.· schedule方法包含两个参数,第一个参数指定将要执行的任务代码,第二个参数指定多长时间后执行这段代...原创 2022-05-25 23:49:27 · 233 阅读 · 0 评论 -
Java多线程~实现生产者与消费者模型(BlockingQueue阻塞队列的实现与应用演示)
目录阻塞队列阻塞队列是什么阻塞队列的作用阻塞队列的实现代码生产者与消费者模型具体代码运行结果阻塞队列阻塞队列是什么阻塞队列满足了队列的结构和特性(链式或数组结构,满足先进先出原则),同时也满足线程安全:①入队操作:如果队列满了,就需要等待;②出队操作:如果队列为空,就需要等待.阻塞队列的作用①“消峰”作用当生产过快时,消费者可能消费不过来,此时就需要阻塞队列来充当缓冲。例如快递公司派送快递,生产操作就相当于快递公司不断接受到需要寄出的包裹,消费操作原创 2022-05-21 19:29:22 · 726 阅读 · 0 评论 -
Java多线程~以“饿汉”与“懒汉”两种模式分别实现单例模式
目录什么是单例模式?如何通过代码实现单例模式?饿汉模式懒汉模式单线程版多线程版双重校验法什么是单例模式?单例模式是设计模式的一种,单例模式即:当某个类提供给别处使用时,只能使用同一个实例化对象。单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例.如何通过代码实现单例模式?利用私有的构造方法实现①饿汉式写法:静态变量初始化时就赋值②懒汉式写法:初始化时不赋值,等使用的时候如果没有初始化再初始化,这种写法可以说是线程不安全的,也可以说..原创 2022-05-21 01:18:20 · 210 阅读 · 0 评论 -
Java多线程~线程间的通信、线程的等待与唤醒、线程通信的模拟使用(面包店买卖面包案例)
目录线程间的通信线程通信的概念线程通信的使用方式wait()-让线程进行等待notify()-唤醒等待的线程notifyAll()-唤醒等待中的线程线程通信的应用案例完整代码运行结果线程间的通信多线程的优势是提高cpu的利用率,但使用时需要注意:当执行时间比较长的任务时,可能存在线程安全的问题,在以上的前提下,需要保证线程的执行有一定的顺序性,因此就有了线程通信的概念.线程通信的概念线程通信,就是一个以线程通知的方式,唤醒某些等待的线程(也可以在...原创 2022-05-16 12:07:54 · 348 阅读 · 0 评论 -
Java多线程~了解并解决多线程带来的风险——“线程安全问题”
目录线程安全问题线程不安全问题演示线程不安全的原因修改共享数据原子性可见性代码顺序性解决线程不安全问题synchronized关键字synchronized的作用synchronized的使用示例volatile关键字volatile的作用volatile的语法synchronized和volatile关键字使用示例synchronized解决线程安全问题示例volatile解决线程安全问题示例线程安全问题简单地说,如果多线..原创 2022-05-13 12:14:33 · 416 阅读 · 2 评论 -
Java多线程~Thread类及其常见方法(线程的启动、等待、休眠、中断)
目录Thread类及常见方法Thread类的常见构造方法Thread的几个常见属性线程的启动-start()start()使用示例start()与run()的区别?等待一个线程-join()获取当前线程休眠当前线程线程的中断Thread类及常见方法Thread类是JVM用来管理线程的一个类,即每个线程都有一个唯一的Thread对象与之关联Thread类的常见构造方法· 线程构造方法的使用用来创建线程,具体的使用介绍在上篇博客有提到:创建线.原创 2022-05-02 22:22:10 · 2321 阅读 · 2 评论 -
Java多线程~认识进程与线程、掌握创建线程的方式
目录进程与线程进程什么是进程?进程管理进程的状态线程什么是线程?线程的实现方式进程与线程的关系Java线程和操作系统线程的关系多线程的优点和缺陷三种方式创建线程继承Thread自定义一个类继承Thread使用匿名内部类实现Runnable接口自定义一个类来实现Runnable接口匿名内部类实现实现Callable接口进程与线程进程什么是进程?进程是操作系统对一个正在运行的程序的一种抽象,也可以把进程看做程序的..原创 2022-04-27 00:16:31 · 368 阅读 · 4 评论