![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一点一点学技术
文章平均质量分 64
huxl_hi
稳稳地。
展开
-
Java线程池应用及实现原理
线程池原理-概念 1、线程池管理器 用于创建并管理线程池,包括创建线程池、销毁线程池、添加新任务。 2、工作线程 线程池中的线程,在没有任务时处于等待状态,可以循环的执行任务。 3、任务接口 每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完成后的收尾工作,任务的执行状态等。 4、任务队列 用于存储没有处理的任务,提供一种缓冲机制。 线程池API 顶层接口:Executor,定义了执行任务的execute方法。 接口:ExecutorService,原创 2022-11-25 13:22:26 · 295 阅读 · 0 评论 -
线程封闭的两种实现方式,ThreadLocal和栈封闭
ThreadLocal 使用ThreadLocal<T> 修饰的成员变量,在每个线程使用时,会为每个线程存储独有的一份数据。使用时用get方法获取。可以理解为每个线程为Key的一个Map,但ThreadLocal类中维护的并不是一个Map,只是这么理解。 public class ThreadLocalTest { private ThreadLocal<String> value = new ThreadLocal<>(); public static原创 2020-09-11 15:09:23 · 310 阅读 · 0 评论 -
Java线程通信的四种形式及代码示例
线程通信是指多个线程之间的协同,如:线程执行先后顺序、获取某个线程的执行结果等。涉及到线程之间相互通信,分为四类:文件共享、网络共享、变量共享、JDK提供的线程协调API。 线程协调API 通过多线程协助的典型场景:生产者-消费者模型,来说明。 1、被弃用的suspend/resume 由于suspend()执行后不会释放锁,导致resume()永远无法拿到锁,而无法通知线程继续执行,示例代码: public void suspendResumeDeadLockTest() throws Ex原创 2020-09-11 14:46:18 · 204 阅读 · 0 评论 -
CPU缓存和内存屏障-待续
CPU缓存 Java指令操作CPU缓存时,JVM为提高程序运行效率,会对指令进行重排序,比如写缓存的效率慢于读缓存的效率,在同时存在写和读操作指令时,读操作的指令先执行。但要遵守as-if-serial语义。 as-if-serial语义 即不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改.原创 2020-09-11 10:54:36 · 117 阅读 · 0 评论 -
线程中止的方式
线程中止的三种方式: 1、stop() 此方式已被弃用,因为无法保证同步代码块的原子性,实例代码如下: public class ThreadStop { public static void main(String[] args) throws InterruptedException { StopThread t = new StopThread(); t.start(); //休眠一秒确保 i 自增成功 Thread.sleep(1000); //暂停线程 t.sto原创 2020-09-10 23:19:09 · 233 阅读 · 0 评论 -
线程状态
线程的六种状态 New(新建)、Runnable(可运行状态)、Blocked(阻塞状态)、Terminated(终止)、Waiting(等待)、Timed Waiting(定时等待)。 状态转换 1、New线程开始后变为Runnable状态 2.1、Runnable线程执行结束后变为Terminated状态 2.2.1、Runnable线程需要等待锁时变为Blocked状态 2.2.2、Blocked线程线程拿到锁时变为Runnable状态 2.3.1、Runnable线程需要等待其他线原创 2020-09-10 17:26:29 · 97 阅读 · 0 评论 -
JVM运行时数据区
java源代码通过编译生成.class文件,java程序运行,将.class文件内容加载到方法区。加载.class文件后,实例化的对象会存储到堆内存。 程序运行时每个线程有自己的独占空间,包括:虚拟机栈、本地方法栈、程序计数器。 方法区、堆内存、虚拟机栈、本地方法栈和程序计数器组成了JVM运行时数据区。 方法区 JVM用户存储加载的类信息、常量、静态变量、编译后的代码等数据。虚拟机规范中这是一个逻辑分区,具体实现根据不同虚拟机来实现。 如:Oracle的HotSpot在Java7中方法区放在永久代原创 2020-09-10 16:53:18 · 114 阅读 · 0 评论