java线程
文章平均质量分 93
杀神lwz
是日已过,命亦随减;如少水鱼,斯有何乐;当勤精进,如救头燃;但念无常,慎勿放逸;
展开
-
Java 并发编程(九)-ScheduleThreadPoolExecutor
从名字上就可以看出,当前线程池是用于执行定时任务的线程池。Java比较早的定时任务工具是Timer类。但是Timer问题很多,串行的,不靠谱,会影响到其他的任务执行。其实除了Timer以及ScheduleThreadPoolExecutor之外,正常在企业中一般会采用Quartz或者是 SpringBoot提供的Schedule的方式去实现定时任务的功能。ScheduleThreadPoolExecutor支持延迟执行以及周期性执行的功能。定时任务线程池的有参构造。原创 2023-12-24 00:12:16 · 117 阅读 · 0 评论 -
Java 并发编程(八)-异步编程-CompletableFuture
平时多线程开发一般就是使用Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor这些内容和并发编程息息相关。相对来说成本都不高,多多使用是可以熟悉这些内容。这些内容组合在一起去解决一些并发编程的问题时,很多时候没有办法很方便的去完成异步编程的操作。执行异步任务,但是没有返回结果。完整一个可以有返回结果的异步任务。获取返回结果,如果基于get方法获取,线程需要挂起在WaitNode里。原创 2023-12-24 00:12:04 · 278 阅读 · 0 评论 -
Java 并发编程(六)-线程池二
Fork/Join它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join框架要完成两件事情:Fork:把一个复杂任务进行分拆,大事化小Join:把分拆任务的结果进行合并。原创 2023-12-17 10:11:20 · 103 阅读 · 0 评论 -
Java 并发编程(七)-异步编程-FutureTask
FutureTask内部的整体结构中,实现了RunnableFuture的接口,这个接口又继承了Runnable, Future这个两个接口。只要任务结束了,无论是正常返回,异常返回,还是任务被取消都会执行这个方法,而这个方法其实就是。可以基于FutureTask的方法去取消任务,查看任务是否结果,以及获取任务的返回结果。异步任务启动之后,可以获取一个绑定当前异步任务的FutureTask。任务执行完毕后,修改任务的状态以及封装任务的结果。,以及调用任务封装结果的方式,还有最后的一些后续处理。原创 2023-12-19 23:40:22 · 605 阅读 · 0 评论 -
Java ReentrantLock--Condition
虽然Node对象有prev和next,但是在ConditionObject中是不会使用这两个属性的,只要在Condition队列中,这两个属性都是null。4、在获取锁资源后,要确认是否在获取锁资源的阶段被中断过,如果被中断过,并且不是 THROW_IE,那就确保interruptMode是REINTERRUPT。awaitNanos:仅仅是在await方法的基础上,做了一点点的改变,整体的逻辑思想都是一样的。挂起线程时,传入要阻塞的时间,时间到了,自动唤醒,走添加到AQS队列的逻辑。原创 2023-12-19 23:40:17 · 87 阅读 · 0 评论 -
Java LockSupport学习
java.util.concurrent.locks下的类LockSupport:用于创建锁和其他同步类的基本线程阻塞原语。park():阻塞线程unpark():解除阻塞线程LockSupport:是线程等待唤醒机制(wait/notify)的加强版让线程等待和唤醒的方法:方式1:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程方式2:使用JUC包中Condition的await()方法让线程等待,使用signal()方法唤醒线程。原创 2023-02-17 23:21:00 · 537 阅读 · 0 评论 -
Java CAS学习
CAS是什么?比较并交换 ==>compareAndSet()CAS的全称为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置是否为预期值,如果是则更改为新的值,这个过程是原子的。 CAS的并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统原创 2023-02-11 08:00:00 · 404 阅读 · 0 评论 -
Java 并发编程三大特性--volatile
JMM(Java内存模型 Java Memory Model,简称JMM) 本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构造数组对象的元素)的访问方式。1、线程解锁前,必须把共享变量的值刷新回主内存2、线程加锁前,必须读取主内存的最新值到自己的工作内存3、加锁解锁是同一把锁主内存:内存8G硬件内存条自己的工作内存:各自线程的工作内存工作速率:硬盘原创 2023-02-04 00:54:39 · 1443 阅读 · 0 评论 -
Java AQS学习
JUC-->AQS-->AbstractQueuedSynchronizer:字面意思:抽象的队列同步器AQS是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态CLH:Craig、Landin and Hagersten队列,是一个单向链表,AQS中的队列是CLH变体的虚拟双向队列FIFO。for (;;) {......原创 2023-04-29 23:46:47 · 808 阅读 · 1 评论 -
Java 并发编程(五)-线程池一
一、ThreadPool线程池1、概述线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销。进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池的优势:线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中原创 2022-04-10 21:51:06 · 895 阅读 · 0 评论 -
Java 并发编程(四)-阻塞队列
一、读写锁1、悲观锁和乐观锁悲观锁:先上锁,再操作,操作完解锁。不支持并发操作。乐观锁:只是在修改完成后,提交时对数据进行上锁比较数据的完整性。2、表锁和行锁表锁:操作表中某一条数据会把整张表进行锁住。表锁不会发生死锁。行锁:操作表中的某一行数据,对这行数据进行锁定。行锁会发生死锁。3、读锁和写锁读锁:共享锁。读锁会发生死锁。写锁:独占锁。写锁会发生死锁。读写锁:一个资源可以被多个读线程访问,或者可以被一个写线程访问,但是不能同时存在读写线程。读写互斥,读读共享。例原创 2022-04-09 23:15:00 · 408 阅读 · 0 评论 -
Java 并发编程(三)-Callable & JUC辅助类
一、Callable接口Callable接口方法:1.V call():计算结果,如果无法计算结果,则抛出一个异常。 Callable接口和Runnable接口区别?1、Callable接口有返回值,Runnable接口没有返回值2、Callable接口call方法可以抛出异常,Runnable接口中run方法不能抛出异常3、实现方法名不同一个是call一个是runFutureTask是Runnable接口的一个实现类,并且此实现类的构造方法和Callable有关。所以可通过原创 2022-04-09 19:56:42 · 2712 阅读 · 0 评论 -
Java 并发编程(二)-多线程锁分类
一、集合的线程安全1.1、List集合线程不安全演示import java.util.ArrayList;import java.util.List;import java.util.UUID;public class ThreadDemo4 { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 20原创 2022-04-08 21:03:35 · 552 阅读 · 0 评论 -
Java 并发编程(一)-JUC
一、概述JUC就是java.util.concurrent工具包的简称,这是一个处理线程的工具包,JDK1.5开始出现的。管程:又称Monitor监视器,又是锁:是一种同步的机制,保证同一时间,只有一个线程访问被保护的数据或代码。用户线程:自定义线程基本都是用户线程。通过Thread.currentThread().isDaemon()来判断是否是用户线程,等于 false是用户线程。等于true 是守护线程。守护线程:特殊线程,运行在后台,比如:垃圾回收设置守护线程: 线程.set原创 2022-04-02 23:31:49 · 515 阅读 · 0 评论 -
Java 多线程学习(二)
Java多线程学习(一)一、线程的常用方法Thread中的常用方法:1. start():启动当前线程;调用当前线程的run()2. run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中3. currentThread():静态方法,返回执行当前代码的线程4. getName():获取当前线程的名字5. setName():设置当前线程的名字6. yield():释放当前cpu的执行权7. join():在线程a中调用线程b的joi原创 2022-03-27 13:17:22 · 440 阅读 · 0 评论 -
Java 多线程学习(一)
一、基本概念程序:一段静态的代码。进程:正在运行的一个程序。线程:线程作为调度和执行的单位,每个拥有独立运栈序计数器。单核 CPU 和多核 CPU的理解?单核 CPU ,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。例如:虽然有多车道,但是收费站只有一个工作人员在收费,只有收了费才能通过,那么CPU就好比收费人员。如果是多核的话,相当于多个收费人员同时收费。才能更好发挥线程效率。现在电脑都是多核的。windows:cpu核数查看双击打开C:\Window原创 2021-07-14 18:02:25 · 501 阅读 · 0 评论