多线程
文章平均质量分 90
阿布~
好好努力,会遇到更好的事情
展开
-
Java 中的线程安全性问题——synchronized / Lock
多线程的“共享性”,意味着在程序中的变量可以由多个线程同时访问。而“可变性”则意味着变量的值在其生命周期内可以发生变化。本篇博客记录在 Java 的多线程学习中如何防止多个线程在数据上发生不受控的并发访问~多线程的“共享性”,意味着在程序中的变量可以由多个线程同时访问。而“可变性”则意味着变量的值在其生命周期内可以发生变化。本篇博客记录在 Java 的多线程学习中如何防止多个线程在数据上发生不受控的并发访问~一个对象是否需要是线程安全的,取决于它是否被多个线程访问。这指的是在程序中访问对象的方原创 2022-03-29 01:22:13 · 1643 阅读 · 29 评论 -
Java 多线程的几种状态
Java中的线程的生命周期大体可分为5钟状态新建(NEW): 新创建了一个线程对象。可运行(RUNNABLE): 线程对象创建后,其他线程(比如main线程) 调用了该线程的 start() 方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取 cpu 的使用权。运行中(RUNNING): 可运行状态(runnable) 的线程获得了cpu 时间片,执行程序代码。阻塞(BLOCKED): 阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了 cpu 时间片(timeslice),原创 2022-03-26 23:01:27 · 1509 阅读 · 13 评论 -
理解—进程和线程之间的联系
进程如果从计算机发展的时间线来讲,在早期的计算机中不含操作系统,他们从头到尾只执行一个程序,并且这个程序能访问计算机中所有的资源。操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都能够在自己单独的进程中运行,操作系统为各个独立的进程分配各种资源。那么从程序层面来讲:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程在早期的分时系统中,每个进程相当于一台虚拟的冯·诺依曼计算机,它拥有存储指令和数据的内存空间,根据机器语言的语义以串行的方式执行指令。那..原创 2022-03-24 23:31:12 · 1130 阅读 · 10 评论 -
(JUC 下典型的类)Java 并发包中线程同步器
文章介绍了并发包中关于线程协作的一些重要类。首先 CountDownLatch 通过计数器提供了更灵活的控制,只要检测到计数器值为 0,就可以往下执行,这相比于 join 必须等待线程执行完毕后主线程才会继续向下运行更灵活。另外,CyclicBarrier 也可以达到 CountDownLatch 的效果,但是后者在计数器值变为 0 后,就不能再被复用,而前者则可以使用 reset 方法重置后复用,前者对同一个算法但是输入参数不同的类似场景比较使用。而 Semaphore 采用了信号量递增的策略,一开始并不原创 2022-04-22 11:32:13 · 844 阅读 · 10 评论 -
并发编程中常见的锁策略<包含详细介绍CAS机制和ABA问题>
常见锁策略乐观锁与悲观锁 <CAS机制的ABA问题>公平锁与非公平锁独占锁与共享锁<锁一直是围绕线程安全来实现的>可重入锁自旋锁原创 2022-04-20 09:16:13 · 1925 阅读 · 11 评论 -
设计模式之一——单例模式
许多时候整个系统只需要拥有⼀个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在⼀个文件中,这些配置数据由⼀个单例对象统⼀读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种⽅式简化了在复杂环境下的配置管理。原创 2022-04-19 12:32:32 · 809 阅读 · 7 评论 -
关于Java线程池ThreadPoolExecutor相关介绍
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行异步任务时直接 new 一个线程来运行,而线程的创建和销毁是需要开销的。线程池里面的线程是可以服用的,不需要每次执行异步任务时都重新创建和销毁线程等。每个 ThreadPoolExecutor 也保留了一些基本的统计数据,比如当前线程池完成的任务数目等。原创 2022-04-14 21:24:06 · 1041 阅读 · 23 评论 -
Java 线程死锁及如何避免死锁介绍
死锁是指两个或两个以上的线程在执行过程中,**因争夺资源而造成的互相等待**的现象,在无外力作用的情况下,这些线程会一直相互等待而无法继续运行下去,原创 2022-04-05 01:09:24 · 4218 阅读 · 10 评论 -
Java 多线程—线程通讯【线程通知与等待,wait / notify() / notifyAll()】
线程通讯就是通过实现多线程之间的交互,让线程的每一个独立的“执行流”通过交互相互配合,在能够有效避免线程并发和死锁的的问题下发挥多线程的优势,更高效的处理一些时间片短,任务量大的执行任务。在 Java 当中,实现线程之间进行通讯和配合执行的功能有三个方法:wait() / wait(long timeout):让线程进入等待状态。no原创 2022-04-11 20:12:48 · 1178 阅读 · 10 评论 -
线程休眠和指定唤醒—关于 LockSupport 相关介绍
JDK 中的 rt.jar 包里面的 LockSupport 是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。原创 2022-04-13 12:12:41 · 899 阅读 · 0 评论 -
Thread 类的基本用法 — 学习笔记
Thread 类的基本用法线程创建线程等待线程休眠yield 让出执行权线程创建线程创建与运行Java中有三种线程创建方式, 分别为实现 Runnable 接口的 run 方法, 继承 Thread 类并重写 run 的方法,和使用带有返回值的 FutureTask 方式。继承 Thread 类方式的实现/** * 继承Thread类创建方式,并重写run方法 */public class ThredDemo { public static void main(Strin原创 2022-03-25 16:45:52 · 1097 阅读 · 9 评论