并发多线程
文章平均质量分 90
并发与多线程
AKA.coder
这个作者很懒,什么都没留下…
展开
-
Java内存模型JMM
我们常说的JVM内存模式指的是JVM的内存分区;而Java内存模式是一种虚拟机规范。 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。 硬件内存架构 ...转载 2021-02-12 10:49:40 · 141 阅读 · 1 评论 -
关于子线程的异常捕获 - UncaughtExceptionHandler
一、为什么需要Thread.UncaughtExceptionHandler 1.主线程可以轻松找到异常,但是子线程不行。 /** * 子线程异常问题 * * @author xuehw * @date 2020-03-05 */ public class ExceptionInChildThread implements Runnable { public static vo...原创 2020-03-05 11:23:46 · 403 阅读 · 0 评论 -
关于线程的属性
一、线程的属性 二、线程的ID 运行上面的main方法,我们发现了问题,为什么一个ID是1,另一个应该是2,确变成了12。 源码中我们可以看到,线程ID,是自增的,初始值为0,且为前缀递增,所以第一个线程的ID不是0,而是1。 degug发现有很多个线程,这就证明除了我们写的主子线程之外,JVM还帮我们创建了一些线程。 二、 线程的名字 1.源码中线程默认的名字 2.修改线程名字 如果...原创 2020-03-04 15:19:37 · 1001 阅读 · 0 评论 -
Thread和Object类中的重要方法
原文地址:多线程核心(1):Thread和Object类中的重要方法 1 方法概览 类 方法名 简介 Thread sleep相关 join 等待其他线程执行完毕 yield相关 放弃已经获取到的CPU资源 currentThread ...转载 2020-03-03 22:37:07 · 149 阅读 · 0 评论 -
线程的六种状态
一、线程状态 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪...原创 2020-03-03 20:45:47 · 175 阅读 · 1 评论 -
如何正确停止线程
一、原理介绍 使用interrupt来通知,并不是强制中断,换句话说也就是不能强制停止线程,没有停止线程的权力。 二、几种情况 1.在普通情况下如何停止线程 第一:使用interrupt()方法作为中断语句。 第二:在线程自身实现代码中进行判断,Thread.currentThread().isInterrupted()。 两者结合起来,结束线程。 2.在线程被阻塞时如何停止线程 当线程被阻塞...原创 2020-03-03 16:09:52 · 222 阅读 · 0 评论 -
启动线程的正确方式
关于start() 1.调用start方法的顺序并不能决定线程执行的顺序 当调用start方法时,其实就是向JVM请求执行此新线程,何时能够运行并不是由start方法调用顺序决定的,而是由线程调度器决定的。 2.start方法会让两个线程同时运行 第一个主线程 =======》创建线程执行start()方法。 第二个子线程 =======》就绪状态 ——》执行状态——》运行状态。 3.不能两...原创 2020-03-03 15:02:10 · 293 阅读 · 0 评论 -
如何实现多线程
oracle官网文档两种实现方式 一、实现Runnable接口和继承Thread类。 二、为什么实现Runnable接口更好。 1.从代码架构角度,实现解耦,将业务逻辑实现和创建线程进行解耦。 2.新建线程的损耗(直接传入Runnable实现类,性能更好)。 3.JAVA不支持双继承,影响代码可扩展性。 三、两种方法的本质对比 方法一(实现Runnable):最终调用target.run(); ...原创 2020-03-03 14:34:06 · 328 阅读 · 0 评论