Java并发
lemon-Java浅学者
Java浅学者
展开
-
Java并发(十三)--线程池详解
文章目录一、线程池介绍1. 什么是线程池?2.创建线程池的原因3.线程池的好处二、创建和停止线程池1.线程池构造函数的参数![C:\Users\dell\AppData\Roaming\Typora\typora-user-images](https://img-blog.csdnimg.cn/20200415153009313.png?x-oss-process=image/watermark,...原创 2020-04-15 15:32:27 · 318 阅读 · 0 评论 -
Java并发(十二)--死锁、活锁和饥饿
文章目录1. 死锁概念以及危害2. 死锁例子3. 死锁排除及分析方法3.1 jstack方法3.2 JConsole方法4. 死锁修复策略5. 实际项目中避免死锁方法6. 活锁7. 饥饿1. 死锁概念以及危害 两个或者更多的线程因竞争资源而造成相互等待的情况,叫做死锁。死锁的影响:死锁的影响在不同系统中是不一样的,取决于系统对死锁 的处理能力。数据库中:检测并放弃事务J...原创 2020-04-13 11:16:08 · 317 阅读 · 0 评论 -
Java并发(十一)--volatile关键字
文章目录1. 什么是volatile?2. volatile的适用场合3. volatile的作用4. volatile和synchronized的关系5. 用volatile解决重排序的问题6. volatile特点1. 什么是volatile? volatile是一种同步机制,比synchronized或者Lock相关类更轻量,因为使用volatile并不会发生上下文切换等开销很大的行为...原创 2020-04-10 09:49:24 · 107 阅读 · 0 评论 -
Java并发(十)--Java内存模型
文章目录1. 底层原理2. Java内存模型介绍3. 原子性4. 可见性4.1 关于可见性4.2 可见性问题产生的原因4.3 JMM的抽象:主内存和本地内存4.4 Happens-Before原则4.5 解决可见性问题的方法5. 有序性5.1 重排序的概念1. 底层原理Java代码---->CPU指令过程:首先是.java文件编译后变成字节码.class文件JVM将字节码文件转为...原创 2020-04-10 09:47:46 · 104 阅读 · 0 评论 -
Java并发(九)--多线程带来的线程安全问题和性能问题详解
文章目录1. 线程安全问题2. 产生线程安全问题的原因3. 线程不安全的三种现象3.1 运行结果错误:3.2 活跃性问题3.3对象的发布和逸出4. 各种需要考虑线程安全的情况5. 性能问题以及体现6. 性能问题产生原因1. 线程安全问题 不管业务中遇到怎样的多个线程访问某对象或某方法的情况,而在编程这个业务逻辑的时候,都不需要额外做任何额外的处理,程序也可以运行正常,就可以称为线程安全。...原创 2020-04-08 11:18:10 · 428 阅读 · 0 评论 -
Java并发(八)--线程未捕获异常处理详解
文章目录1. 为什么需要UncaughtExceptionHandler?2. 两种解决方案1. 为什么需要UncaughtExceptionHandler?1.主线程可以轻松发现异常,而子线程不可以。/** * @author zhoup * @date 2020/4/7 14:15 * @describe */public class ExceptionChildThread ...原创 2020-04-08 11:14:45 · 409 阅读 · 0 评论 -
Java并发(七)--线程各属性
文章目录1. 属性概览2. 线程ID3. 线程名称3. 守护线程4. 线程优先级1. 属性概览[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vyBCmL30-1585792834139)(E:\待办\java并发\悟空-Java并发核心知识体系精讲\Java并发编程精讲\源码+资料\362\╞Σ╦ⁿ╤º╧░╫╩┴╧\技术图片\线程各属性概览.png)]2. 线...原创 2020-04-02 10:01:11 · 185 阅读 · 0 评论 -
Java并发(六)--sleep()、join()、yield()等方法详解
文章目录1.sleep()方法详解2. join()方法详解2.1 join原理3. yield()方法详解1.sleep()方法详解作用:让线程在预期的时间执行,其他时候不要占用CPU资源。性质:sleep方法不会释放锁sleep方法响应中断代码实现:1.sleep方法不会释放锁/** * @author zhoup * @date 2020/4/1 17:07 * @...原创 2020-04-02 09:01:24 · 250 阅读 · 0 评论 -
Java并发(五)--wait()、notify()和notifyAll()方法详解
文章目录1. 重要方法概览2.wait、notify、notifyAll详解2.1 作用、用法3. 代码实践4.wait、notify、notifyAll特点、性质5. wait()底层原理6. 手写生产者和消费者设计模式7.小例子1. 重要方法概览Thread类:sleep相关 --线程休眠join —等待其他线程执行完毕yield相关 --放弃已经获取到的CPU资源cu...原创 2020-04-01 16:11:08 · 331 阅读 · 0 评论 -
Java并发(三)--关于停止线程
文章目录1. 原理介绍2. 停止线程的实践2.1正确的停止方法2.2.1 普通情况2.2.2 在阻塞情况下中断线程2.2.3 线程每次迭代后都阻塞的情况下中断2.2.4 TryCatch放到while里面的问题2.2.5 停止线程的两种最佳实践3. 应中断的方法4. 错误的停止方法5. 如何分析native方法1. 原理介绍 使用interrupt来通知,而不是强制。2. 停止线程的实践...原创 2020-03-31 14:00:11 · 113 阅读 · 0 评论 -
Java并发(二)--启动线程的正确和错误方式以及原理解析
文章目录1. start() 和 run() 方法比较2. start() 方法原理解析2.1 start()方法含义2.2 start() 源码解析3. run() 方法原理解析1. start() 和 run() 方法比较public class StartThreadTest { public static void main(String[] args) { R...原创 2020-03-30 18:33:31 · 108 阅读 · 0 评论 -
Java并发(一)--实现线程的方式
目录文章目录目录1. 官方声明实现多线程有两种方式。1.1 通过继承Thread类,重写Thread类的run方法1.2 通过实现Runnable接口,把实例作为参数传递给Thread类2. 两种方式对比3. 两种方法一起使用的结果是什么?4. 错误说法5.学习编程的途径6. 如何在业务开发中成长1. 官方声明实现多线程有两种方式。1.1 通过继承Thread类,重写Thread类的run方...原创 2020-03-30 14:53:00 · 121 阅读 · 0 评论 -
死锁以及死锁排除和分析
死锁以及死锁排除和分析目录文章目录死锁以及死锁排除和分析目录一、死锁概念二、死锁例子三、死锁排除及分析方法3.1 jstack方法3.2 JConsole方法一、死锁概念 两个或者更多的线程因竞争资源而造成相互等待的情况,叫做死锁。二、死锁例子package com.lemon.practice.demo;public class DiedLockDemo { ...原创 2020-03-25 16:18:02 · 217 阅读 · 0 评论 -
Java并发--多线程概念的建立
目录文章目录目录同步和异步并发和并行临界区阻塞和非阻塞死锁(deadlock)、饥饿(Starvation)和活锁(Livelock)同步和异步同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步:异步方法调用更像是一个消息传递,一旦开始,方法调用会立即返回,调用者就可以继续后续的操作。并发和并行并发:并发偏重于多个任务交替执行,多个任务有可能是串行的。...原创 2020-02-28 17:20:59 · 114 阅读 · 0 评论