并发编程
文章平均质量分 91
详细分析讲解java并发原理,使用方法,多线程和锁机制等
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【并发编程】JUC并发编程(彻底搞懂JUC)
JUC实际上就是我们对于jdk中java.util .concurrent 工具包的简称,其结构如下:这个包下都是Java处理线程相关的类,自jdk1.5后出现。目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!JUC主要是指JDK8中java.util.concurrent里提供的一系列线程并发工具,但是线程并发的问题远不止几个工具这么简单。要学习工具使用,更要能深入理解工具的原理以及处理线程并发问题的思路。原创 2023-03-29 17:29:17 · 7126 阅读 · 0 评论
-
【java】Java并发编程--Java实现多线程的4种方式
继承Thread类实现Runnable接口实现Callable接口通过FutureTask包装器来创建Thread线程使用ExecutorService、Callable、Future实现有返回结果的多线程其中前两种方式线程执行完后都没有返回值,而后两种是带返回值的。除此之外,通过Timer启动定时任务,或者通过像Spring Task和quartz这样的第三方任务调度框架也可以开启多线程任务。原创 2023-03-10 06:00:00 · 1441 阅读 · 0 评论
-
【Java】Java多线程编程基础
所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,死锁的操作一般是在程序运行时候才有可能出现,死锁是在多线程开发中较为常见的一种问题,过多的同步就有可能出现死锁。如果并发的线程数量过多,并且每个线程都是执行一个时间很短的任务就结束,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要消耗时间,线程也属于宝贵的系统资源,因此,线程池就是为了能使线程可以复用而创建的。Java中的线程分为两类,用户线程和守护线程。原创 2023-07-26 18:22:17 · 996 阅读 · 0 评论 -
【并发编程】深入探索AQS
AQS(AbstractQueuedSynchronizer)就是一个抽象类,其主要维护一个资源同步状态变量的值(state)和一个存放排队线程的CLH双向队列,同时线程阻塞等待以及被唤醒时锁分配的机制。具体结构如下:AQS使用一个volatile的int类型的成员变量来表示同步状态,通过内置的先进先出的CLH队列来完成获取资源线程的排队工作,将每条要去抢占资源的线程封装成一个Node节点来实现锁的分配,通过CAS完成对State值的修改。原创 2023-06-21 00:10:36 · 386 阅读 · 0 评论 -
【多线程】什么是线程死锁?形成条件是什么?如何避免?
死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。原创 2023-05-23 16:33:40 · 882 阅读 · 0 评论 -
【多线程】Java线程间通信
线程间通信使线程成为一个整体,提高系统之间的交互性,在提高CPU利用率的同时可以对线程任务进行有效的把控与监督。原创 2023-05-23 15:58:06 · 1464 阅读 · 0 评论 -
【多线程】什么是线程同步?什么是线程异步?
每一个服务进程的运行,都包含若干进程(Thread),线程是调度的基本单位,进程则是资源拥有的基本单位。线程有自己的私有数据,比如栈和寄存器,同时与其它线程共享相同的虚拟内存和全局变量等资源,当多个线程同时读写同一份共享资源的时候,会引起冲突,这时候就需要引入线程同步机制使各个线程排队一个一个的对共享资源进行操作,而不是同时进行。线程同步其实实现的是线程排队。防止线程同步访问共享资源造成冲突。变量需要同步,常量不需要(常量存放于方法区)。原创 2023-05-23 15:01:03 · 1821 阅读 · 0 评论 -
【Java】Java中线程安全有哪些实现思路?
本文介绍了 Java 中几种实现线程安全的方法,包括 synchronized 关键字、ReentrantLock 类、ConcurrentHashMap 类、Atomic 类、ThreadLocal 类等。每种方法都有其特点和适用场景,需要根据实际需求选择合适的方法。在实际应用中,为了更好地提高系统的性能和并发能力,可以组合使用多种方法来实现线程安全。原创 2023-05-13 07:45:50 · 908 阅读 · 0 评论 -
【面试】面试官:说一下线程池7个参数的含义?
/... }corePoolSize:核心线程数。maximumPoolSize:最大线程数。keepAliveTime:空闲线程存活时间。TimeUnit:时间单位。BlockingQueue:线程池任务队列。ThreadFactory:创建线程的工厂。RejectedExecutionHandler:拒绝策略。corePoolSize:核心线程数,线程池正常情况下保持的线程数,大户人家“长工”的数量。原创 2023-05-06 20:07:46 · 1331 阅读 · 0 评论 -
【java】Java中的锁
举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchronized关键字和Lock的实现类都是悲观锁适用场景:适合写操作多的场景,先加锁可以保证写操作时数据正确。原创 2023-04-27 10:44:43 · 1094 阅读 · 1 评论 -
【并发编程】Java并发之关键字synchronized使用和原理
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点一是存在共享数据(也称临界资源)二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态,直到当前线程处理完毕释放该锁。原创 2023-04-23 14:34:24 · 902 阅读 · 0 评论 -
【Java并发编程系列】全方位理解多线程几乎包含线程的所有操作哦
多线程对于我们后端日常开发是一种加快程序处理的常用的方式,同时也是面试过程中常见的一个话题,本文一部分属于基础扫盲内容,另一部分属于高阶的部分,同时对于一些细节点有相应的实战。CPU密集型 => 线程池的大小推荐为CPU数量 + 1,CPU数量可以根据Runtime.availableProcessors方法获取IO密集型 => CPU数量 * CPU利用率 * (1 + 线程等待时间/线程CPU时间)原创 2023-03-26 20:11:46 · 773 阅读 · 0 评论 -
【java】Java并发编程系列- volatile关键字(高并发中特实用哦)
主要讲解volatile的相关知识,以及容易遇到的坑。volatile可以保证线程可⻅性且提供了⼀定的有序性,但是⽆法保证原⼦性。在JVM底层volatile是采⽤“内存屏障”来 实现的。它确保指令重排序时不会把其后⾯的指令排到内存屏障之前的位置,也不会把前⾯的指令排到内存屏障的后 ⾯;即在-执⾏到内存屏障这句指令时,在它前⾯的操作已经全部完成;它会强制将对缓存的修改操作⽴即写⼊主存;如果是写操作,它会导致其他CPU中对应的缓存⾏⽆效。原创 2023-03-17 06:45:00 · 552 阅读 · 0 评论 -
【java】Java并发编程系列-基础知识(非常详细哦)
今天讲解了Java并发编程的3个特性,然后基于⾥⾯的两个特性“可⻅性”和“有序性”引出⼏个重要的概念,分别为“内 存模型JMM”、“重排序”和“内存屏障”,这个对后续理解volatile、synchronized、final,以及避免使⽤的各种坑, 真的是⾮常⾮常重要,所以如果想在Java上有所成就,并发的基础知识一定要牢固掌握哦 ,本系列会一步一步深入!!!原创 2023-03-16 19:59:37 · 986 阅读 · 4 评论 -
【java】Java线程池实现原理及业务中的实践
线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。原创 2023-02-28 07:15:00 · 615 阅读 · 3 评论 -
进程和线程的区别
能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换、锁机制处理(获取锁,释放锁等),所以,多线程执行不快反慢。协程避免了无意义的调度,由此可以提高性能,但程序员必须自己承担调度的责任。原创 2022-11-15 23:36:15 · 155 阅读 · 0 评论 -
什么是多线程?如何实现多线程?
【转】什么是线程安全?怎么实现线程安全?什么是进程?什么是线程?什么是线程安全?添加一个状态呢?如何确保线程安全?synchronizedlock什么是进程?电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。比如下图中的QQ、酷狗播放器、电脑管家等等。什么是线程?进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更转载 2021-04-07 09:22:34 · 1770 阅读 · 0 评论 -
进程和线程的主要区别??
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)。内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而原创 2020-05-21 22:40:22 · 224 阅读 · 0 评论
分享