
并发编程
文章平均质量分 82
一蓑烟雨任平生2024
这个作者很懒,什么都没留下…
展开
-
并发编程面试题
synchronized 和 volatile 的区别是什么?volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。volatile不...原创 2020-08-22 14:06:48 · 247 阅读 · 0 评论 -
Java-线程池
线程池1、线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。(是什么)2、那么,我们为什么需要用到线程池呢?每次用的时候手动创建不行吗?在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统转载 2020-06-10 17:05:14 · 381 阅读 · 0 评论 -
ThreadLocal探究
目录一、ThreadLocal是什么二、ThreadLocal怎么用三、ThreadLocal源码分析四、ThreadLocal其他几个注意的点参考文章:面试官没想到ThreadLocal我用得这么溜,人直接傻掉再有人问你什么是ThreadLocal,就把这篇文章甩给他!ThreadLocal,你想了解的都在这里(进来瞧瞧不后悔)ThreadLocal理解及应用一、ThreadLocal是什么从名字我们就可以看到ThreadLocal叫做..转载 2020-07-27 14:08:30 · 306 阅读 · 0 评论 -
多线程-并发编程
进程和线程的区别进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O): 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。 进程单独占有一定的内存地址空间,一个进程出现问题不会影响其他进程,不影响主程序的稳定性,可靠性高;一个线程崩溃可能影响整个程序的稳定性,可靠性较低。原创 2020-07-01 13:25:17 · 3703 阅读 · 2 评论 -
Synchronized
Synchronized原创 2024-04-05 15:12:41 · 331 阅读 · 0 评论 -
CompletableFuture的使用
是Java 8中提供的一个强大的异步编程工具,它极大地简化了并发编程和异步任务的管理和组合。创建一个不返回结果的异步任务。当你只需要执行某个动作,而不关心结果时,可以使用此方法。创建一个返回结果的异步任务。任务完成后可以通过get()方法获取结果。上述方法还可以传入一个自定义的Executor,用于执行异步任务,默认情况下,如果没有指定,会使用。在前一个任务完成之后,根据前一个任务的结果执行一个函数并返回新的。类似于thenApply,但是返回的是一个新的,适用于任务之间有依赖的情况。原创 2024-03-11 23:04:51 · 1145 阅读 · 0 评论 -
两个线程控制交替输出:1A2B3C4D......
package threaddemo;/** * @author root * @Description: * @Package threaddemo * @date 2020/9/26 21:55 */public class print_1A2B3C { static class Printer { private int index=1; public synchronized void print(int i){ .原创 2020-09-26 22:16:41 · 987 阅读 · 0 评论 -
JVM对Synchronized锁的优化
目录JVM对锁的优化偏向锁轻量级锁自旋锁锁消除synchronzied原理对象头Monitorsynchronized字节码分析轻量级锁锁膨胀自旋偏向锁偏向锁失效的几种情况偏向锁批量重偏向偏向锁批量撤销锁消除JVM对锁的优化这里的锁优化主要是指 JVM 对 synchronized 的优化。偏向锁偏向锁的思想是偏向于让第一个获取锁对象的线程,这个线程在之后获取该锁就不再需要进行同步操作,甚至连 CAS 操作也不再需要..原创 2020-08-22 14:29:51 · 417 阅读 · 0 评论 -
并发编程——模式和应用
目录同步模式——保护性暂停应用同步模式——带控制超时的保护性暂停同步模式——多任务版保护性暂停同步模式之——Balking(犹豫)同步模式——顺序控制1. 固定运行顺序1.1 wait notify 实现1.2 Park Unpark 实现2. 交替输出2.1 wait notify 版2.2 Lock 条件变量版2.3 Park Unpark 版异步模式——生产者/消费者模式终止模式——两阶段终止模式2.1 利用 isInterrupt.原创 2020-07-27 11:13:02 · 633 阅读 · 0 评论 -
Java关键字——volatile
可见性JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.JMM关于同步规定:1.线程解锁前,必须把共享变量的值刷新回主内存2.线程加锁前,必须读取主内存的最新值到自己的工作内存3.加锁解锁是同一把锁由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方成为栈空间),工作内存是每个线程的...原创 2020-07-13 20:45:28 · 272 阅读 · 0 评论 -
Java-各种锁
偏向锁Hotspot的作者经过以往的研究发现大多数情况下锁不仅不存在多线程竞争,而且总是由同一线程多次获得,于是引入了偏向锁。偏向锁会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。也就是说,偏向锁在资源无竞争情况下消除了同步语句,连CAS操作都不做了,提高了程序的运行性能。大白话就是对锁置个变量,如果发现为true,代表资源无竞争,则无需再走各种加锁/解锁流程。如果为false,代表存在其他线程竞争资源,那么就会走后...原创 2020-07-02 10:28:36 · 214 阅读 · 0 评论