多线程篇
文章平均质量分 94
在这个专栏中,我们将深入探索Java多线程的世界,揭开并发和并行计算的神秘面纱。随着现代计算机核心数量的增长,理解如何有效地使用这些资源变得越来越重要,而Java多线程技术正是解决这一挑战的关键工具之一。
书生-w
过去无法挽回,未来可以改变。
展开
-
【多线程基础】 定时器Timer的使用及实现
定时器相当于一个任务管理器。有些任务可能现在执行, 有些任务可能过1个小时,甚至很久才会执行。定时器就是对这些任务进行管理监视, 如果一个任务执行时间到了,定时器就会将这个任务执行。 保证所有的任务都会在合适的时间执行。原创 2023-03-25 09:18:08 · 22896 阅读 · 3 评论 -
【多线程基础】 线程池的使用及实现
线程池:一个容纳多个线程的容器,容器中的线程可以重复使用,省去了频繁创建和销毁线程对象的操作。原创 2023-03-25 18:29:21 · 21580 阅读 · 3 评论 -
【多线程进阶】JUC下的常用类
"JUC"是"Java Util Concurrent"的缩写,代表Java提供的一套并发工具类。这些工具类大大简化了编程并发和多线程应用的复杂性,提供了更高级、更强大、更安全的并发操作功能。以下是一些常见的JUC类:原创 2023-06-13 15:38:29 · 7973 阅读 · 1 评论 -
【多线程基础】 单例模式
单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。原创 2023-03-21 17:51:21 · 22614 阅读 · 2 评论 -
【多线程基础】 进程与线程之间的区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。原创 2023-03-19 00:35:21 · 23118 阅读 · 1 评论 -
【多线程基础】 一文详解线程安全
如果说在多线程环境下代码运行的结果是符合我们预期的,即该代码在单线程中运行得到的结果,那么就说说这个程序是线程安全的,否则就是线程不安全的.原创 2023-03-21 04:33:46 · 22606 阅读 · 3 评论 -
进程调度的基本过程
进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备“隔离性”。原创 2023-03-18 23:53:54 · 23264 阅读 · 3 评论 -
【多线程基础】 wait和notify
线程等待wait()和通知notify(),主要用于多线程之间的通信协作,而且这两个方法都是属于Object类,说明任何对象都可以调用这两个方法。当在一个实例对象上调用了wait()方法之后,当前线程就会在这个对象上等待。直到另外的线程调用了该对象的notify()方法,处于等待状态的线程才得以继续进行。这样,多线程之间就可以用这两个方法进行通信协作了。原创 2023-03-21 14:59:29 · 22924 阅读 · 1 评论 -
【多线程基础】 Java 线程的几种状态
线程共有6种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。分别对应于:新建、运行、阻塞、等待、带超时的等待、终止。原创 2023-03-19 03:13:09 · 25795 阅读 · 1 评论 -
【多线程基础】 阻塞队列的使用及其实现
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。原创 2023-03-23 03:42:41 · 22169 阅读 · 2 评论 -
【多线程基础】 Thread 类的基本用法
上一篇文章我们讲了Java关于线程的基本知识,接下来给大家分享一些线程是如何创建的以及线程的一些基本用法!原创 2023-03-19 02:04:59 · 23306 阅读 · 3 评论 -
【多线程进阶】synchronized的总结
如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分,今天就来看一下synchronized的使用和底层原理。原创 2023-04-03 02:08:51 · 21354 阅读 · 0 评论 -
【多线程进阶】锁策略和CAS面试题
乐观锁的思想是,每次访问共享资源时都假定其他线程不会同时访问该资源,因此不对该资源进行加锁保护,而是通过版本号、时间戳等机制来检测数据是否被其他线程修改过。悲观锁的思想是,每次访问共享资源时都假定其他线程可能同时访问该资源,因此会对该资源进行加锁保护。原创 2023-04-03 00:27:30 · 21021 阅读 · 0 评论 -
【多线程基础】 保证线程安全的总结
当你的才华撑不起你的野心的时候,你就应该静下心来学习!欢迎志同道合的朋友一起加油喔比个心一.使用没有共享资源的模型1.简化并发编程:由于不存在共享数据,线程间无需同步,这使得编程变得简单,降低了出错的风险。2.可伸缩性:由于线程之间不需要竞争共享资源,这种模型可以很好地利用多核处理器的性能,提高系统的吞吐量。3.减少锁竞争:无共享数据意味着无需使用锁来保护资源,从而避免了锁竞争带来的性能开销。4.易于理解:无共享数据模型不需要复杂的同步逻辑,使得代码更容易理解和维护。原创 2023-04-01 16:59:26 · 21845 阅读 · 0 评论 -
【多线程进阶】HashTable, HashMap, ConcurrentHashMap 之间的区别?(经典面试题)
如果大家学过数据结构,想必对HashMap都不陌生, HashMap 的实现很简单嘛, 数组加链表嘛, 然后继续问你HashTable和HashMap的区别是什么, 我们会说一个线程安全, 然后一个线程不安全啊,HashTable是不允许存在 NULL 值的,但是HashMap中的 key 和 value 都允许为 null , 并且 key 为 null 的键值对永远放在以 table[0] 为头节点的链表中. 我们知道HashMap是线程不安全的,只适用于单线程下, 而在多线原创 2023-04-03 04:58:48 · 20607 阅读 · 0 评论 -
【多线程进阶】死锁的成因和解决方案
在Java中,死锁是指两个或多个线程相互等待对方已持有的锁,导致所有线程都被阻塞,无法继续执行的情况。死锁是多线程程序常见的问题之一,如果程序中存在死锁,会导致系统性能下降,甚至崩溃。原创 2023-04-03 04:17:59 · 24472 阅读 · 1 评论