
Java线程学习笔记
文章平均质量分 50
Java线程
一角残叶
人生如逆旅,我亦是行人
展开
-
深入浅出Java并发多线程(19) -并发编程底层原理(4)
1 面试常见问题原创 2021-04-29 22:07:58 · 143 阅读 · 0 评论 -
深入浅出Java并发多线程(18) -并发编程底层原理(3)
1 原子性1.1 java 中的原子操作1.2 long 和 double 的原子性1.3 原子操作 + 原子操作 !=原子操作2 面试常见问题2.1 单例模式2.1.1 饿汉式,静态常量,可用在类装载的时候就完成了实例化,避免了线程同步问题,因为类的加载是由JVM自身保证线程安全的。后续其他类想要调用,永远拿到的都是这个实例。/** * @Description 饿汉式,静态常量,可用 * @Author tzb * @Date 2021/4/11 16:08原创 2021-04-29 20:07:11 · 209 阅读 · 2 评论 -
深入浅出Java并发多线程(17) -并发编程底层原理(2)
1 可见性1.1 volatile1.1.1 volatile适用的场合package jmm;import java.util.concurrent.atomic.AtomicInteger;/** * @Description 不适用volatile * @Author tzb * @Date 2021/4/7 20:50 * @Version 1.0 **/public class NoVolatile implements Runnable { volatil原创 2021-04-11 15:46:37 · 157 阅读 · 0 评论 -
深入浅出Java并发多线程(16) -并发编程底层原理(1)
1 JMM底层原理 - 重排序原创 2021-04-07 20:41:50 · 145 阅读 · 1 评论 -
深入浅出Java并发多线程(15) -并发编程底层原理
1 Java内存模型原创 2021-03-30 22:48:47 · 194 阅读 · 0 评论 -
深入浅出Java并发多线程(14) - 多线程导致的问题
1 性能问题原创 2021-03-14 17:43:15 · 178 阅读 · 0 评论 -
深入浅出Java并发多线程(13)- 线程8大核心基础 -多线程导致的问题
1 多线程安全问题1.1 活跃性问题-死锁原创 2021-03-09 23:04:49 · 314 阅读 · 0 评论 -
深入浅出Java并发多线程(12)- 线程8大核心基础 -多线程导致的问题
1 多线程导致的问题1.1 安全问题1.2 性能问题1.3 问题原创 2021-03-07 17:36:06 · 242 阅读 · 0 评论 -
深入浅出Java并发多线程(11)- 线程8大核心基础 - 线程异常处理
1 线程未捕获异常该怎么处理1.1 为何需要 UncaughtExceptionHandler主线程可以轻松发现异常,子线程却不行原创 2021-03-02 22:31:03 · 520 阅读 · 0 评论 -
深入浅出Java并发多线程(10)- 线程8大核心基础-线程属性
1原创 2021-03-01 22:29:58 · 151 阅读 · 1 评论 -
深入浅出Java并发多线程(9)- Thread和Object类中的重要方法详解
1 Thread和Object类中的重要方法详解1.1 sleep 方法详解作用:让线程在预期的世界执行,其他时候不要占用CPU资源特点:不释放锁,包括 synchronized 和 lock和wait不同/** * @Description 展示sleep的时候不释放synchronized的monitor,等sleep时间到了以后,正常结束后才释放锁 * @Author tzb * @Date 2021/2/9 15:43 * @Version 1.0 **/publ原创 2021-02-10 15:31:08 · 271 阅读 · 1 评论 -
深入浅出Java并发多线程(8)- 线程8大核心基础
1 Thread 和 Object 类中的重要方法1.1 wait,notify,notifyAll作用、用法原创 2021-02-09 15:26:57 · 235 阅读 · 0 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(6)- 面试和总结
1 synchronized使用注意点锁对象不能为空作用域不宜太大避免死锁2 如何选择 Lock 和 synchronized尽量都不使用,用 java.util包下的各种工具类优先使用 synchronized3 多线程访问同步方法的各种具体情况2 思考2.1 多个线程等待同一个 synchronized锁的时候,JVM如何选择下一个获取的是哪个线程?内部锁调动机制2.2 synchronized 使得同时只有一个线程可以执行,性能较差,有什么方法可以提升性能原创 2021-02-07 17:18:29 · 239 阅读 · 1 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(5)-加锁和释放锁的原理
1 加锁和释放锁的原理现象获取和释放锁的时机:内置锁等价代码深入JVM看字节码:反编译、monitor指令package com.tzb.test.demo;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @Description method1和methond2这两个方法是等价的 * @Author tzb * @Date 2021/2.原创 2021-02-07 16:38:15 · 310 阅读 · 0 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(4)- synchronized 性质
1 可重入2 不可中断原创 2021-02-07 14:33:23 · 128 阅读 · 0 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(3)- 多线程访问同步方法的7种情况(面试)
1 两个线程同时访问一个对象的同步方法synchronized 起作用2 两个线程访问的是两个对象的同步方法synchronized 不起作用3 两个线程访问的是 synchronized 的静态方法synchronized 起作用4 同时访问同步方法和非同步方法synchronized 不会影响其他方法,即非同步方法不受影响/** * @Description 同步方法和非同步方法 * @Author tzb * @Date 2021/1/8 15:52 * @Ve原创 2021-01-08 18:44:42 · 261 阅读 · 0 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(2)- 消失的请求
1 a++ 问题/** * @Description a++在多线程的问题 * @Author tzb * @Date 2021/1/8 15:13 * @Version 1.0 **/public class DisappearRequest1 implements Runnable { static DisappearRequest1 instance = new DisappearRequest1(); static int i = 0; @Overrid原创 2021-01-08 15:39:42 · 148 阅读 · 0 评论 -
Java高并发之魂-synchronized深度解析 学习笔记(1)- 对象锁和类锁
1 Synchronized1.1 作用一句话概括:能够保证 同一时刻 最多只有 一个 线程执行该段代码,以达到保证并发安全的效果。1.1 不使用并发手段的后果原创 2021-01-08 15:07:59 · 203 阅读 · 4 评论 -
深入浅出Java并发多线程(7)- 线程的一生(6个状态)
1 每个状态的含义原创 2020-12-10 22:17:59 · 434 阅读 · 0 评论 -
深入浅出Java并发多线程(6)- 线程停止、中断(3)
1 停止线程相关的重要函数Thread.interrupted()的方法的目标对象是”当前线程“,而不管方法来自于哪个对象1.1 如何分析 native 方法https://github.com/openjdk-mirror/jdk7u-jdkhttps://github.com/openjdk-mirror/jdk7u-hotspot2 停止线程-常见面试题请求方,发出请求信号;被请求方必须在每次循环中或者适当的时候检查这个中断信号,并且在可能抛出 inter原创 2020-12-08 22:57:33 · 207 阅读 · 0 评论 -
深入浅出Java并发多线程(5)- 线程停止、中断(2)
1 停止线程的错误方法/** * @Description 错误的停止方法 * 会导致线程运行一半,突然停止,没办法完成一个基本单位的操作(一个连队), * 会造成脏数据(有的连队多领有的少领准备) * @Author tzb * @Date 2020/12/7 22:45 * @Version 1.0 **/public class StopThread implements Runnable { @Override public void run() {原创 2020-12-08 22:17:19 · 190 阅读 · 0 评论 -
深入浅出Java并发多线程(4)- 线程停止、中断(1)
1 正确停止线程原理:使用 interrupt 来通知,而不是强制1.1 线程停止的情况run 方法执行完毕;有异常出现,且方法中没有捕获;1.2 正确的停止方法interrupt1. 通常线程会在什么情况下停止普通情况;/** * @Description run 方法内没有 sleep 或者 wait方法时,停止线程 * @Author tzb * @Date 2020/12/3 16:40 * @Version 1.0 **/public class RightWayS原创 2020-12-07 22:38:46 · 244 阅读 · 0 评论 -
深入浅出Java并发多线程(3)- 启动线程的正确和错误方式
1 启动线程的方法package threadcoreknowledge.startthread;/** * @Description 两种启动线程的方法 * @Author tzb * @Date 2020/11/29 17:18 * @Version 1.0 **/public class StartAndRunMethod { public static void main(String[] args) { Runnable runnable = ()-&g原创 2020-12-03 16:22:23 · 202 阅读 · 0 评论 -
深入浅出Java并发多线程(2)- 实现线程方式
1 实现多线程的方法有几种2种public class RunnableStyle implements Runnable { public static void main(String[] args) { Thread thread = new Thread(new RunnableStyle()); thread.start(); } @Override public void run() { System原创 2020-11-29 17:15:41 · 381 阅读 · 0 评论 -
深入浅出Java并发多线程(1)- 概述
1 线程的八大核心基础知识原创 2020-11-25 22:32:16 · 235 阅读 · 0 评论 -
Java线程学习笔记(2)—— 线程的实现方式
1 继承 Thread定义类继承Thread重写run方法把新线程要做的事写在run方法中创建线程对象开启新线程, 内部会自动执行run方法多线程的打印顺序不一样,抢占资源package threadtest;public class Demo2 { /* * 主线程-不能new * 只能创建子线程 * */ public ...原创 2019-03-22 14:43:39 · 164 阅读 · 0 评论 -
Java线程学习笔记(3)—— 匿名内部类实现线程+线程名字
1 匿名内部类实现线程package threadtest;public class Demo4 { public static void main(String[] args) { // 匿名内部类实现线程的 2 种方式 /* Thread t1 = new Thread(){ @Override p...原创 2019-03-22 16:02:43 · 358 阅读 · 0 评论 -
Java线程学习笔记(4)—— 同步代码块 + 同步方法
1 同步同步就是加锁,不让其它人访问synchronized指的就是同步的意思1.1 场景当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步.如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码.2 同步代码块在方法内部声明 synchronized使用s...原创 2019-03-22 17:09:48 · 310 阅读 · 0 评论 -
Java线程学习笔记(5)—— 死锁
1 死锁多线程同步的时候,如果同步代码嵌套,使用相同锁,就可能出现死锁。原创 2019-03-22 19:35:52 · 205 阅读 · 0 评论 -
Java线程学习笔记(6)—— 单例设计模式
1 单例保证类在内存中只有一个对象。对象是new出来的,因此也就是说在程序中只能new一次对象1.1 实现单例的步骤声明一个类,类中有一个静态属性,类型与类名相同把空参构造方法声明为私有在类中提供一个公共静态访问方法来返回该对象实例1.2 单例方式(1)—— 饿汉式一开始就 new 对象public class Singleton { private stat...原创 2019-03-22 20:07:54 · 173 阅读 · 0 评论 -
Java线程学习笔记(7)——Runtime类+ Timer定时器
1 Runtime 类Runtime类是一个单例类每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。通过 getRuntime 方法获取当前运行时。案例:自动关机 Runtime r = Runtime.getRuntime(); r.exec("shutdown -s -t 300");//300秒后关机 r...原创 2019-03-22 21:17:54 · 322 阅读 · 0 评论 -
Java线程学习笔记(8)—— 线程间通信
1 线程间通信多个线程并发执行时, 在默认情况下CPU是随机切换线程的,如果我们希望他们有规律的执行, 就可以使用通信, 例如每个线程执行一次打印1.1 如何通信如果希望线程等待, 就调用wait()如果希望唤醒等待的线程, 就调用notify();notify是随机唤醒一个线程notifyAll是唤醒所有线程这两个方法必须在同步代码中执行, 并且使用同步锁对象来调用如果方法中没...原创 2019-05-04 16:19:52 · 202 阅读 · 0 评论 -
Java线程学习笔记(9)—— JDK1.5新特性-互斥锁(ReentrantLock)
1 ReentrantLock介绍可以实现同步加锁;使用 lock(),unlock() 方法同步;1.2 使用要点使用 ReentrantLock 类的 newCondition() 方法可以获取 Condition 对象;需要等待的时候使用 Condition 的 await() 方法,唤醒的时候用 signal() 方法;不同的线程使用不同的 Condition,这样在唤醒...原创 2019-05-04 16:45:23 · 232 阅读 · 0 评论 -
Java线程学习笔记(10)—— 线程组
1 线程组介绍Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制;默认情况下,所有的线程都属于主线程组;public final ThreadGroup getThreadGroup() 通过线程对象获取他所属于的组;public final String getName() 通过线程组对象获取组的名字;可以给线程设置分...原创 2019-05-05 09:45:35 · 327 阅读 · 0 评论 -
Java线程学习笔记(11)—— 线程的 5 种状态
1 线程的 5 中状态新建: 创建线程对象;就绪: 线程对象已经启动,但是还没有获得CPU的执行权;运行: 获得了 CPU 的执行权;阻塞: 没有CPU执行权,回到就绪;死亡:代码运行完毕;...原创 2019-05-05 10:01:56 · 204 阅读 · 0 评论 -
Java线程学习笔记(12)——线程池
1 线程池介绍程序启动一个新的线程成本比较高,因为要涉及与操作系统进行交互。当程序要创建大量生存期很短的线程时,考虑使用线程池。线程池中的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。JDK5之前,需要自己实现线程池,从JDK5开始支持内置的线程池;2 线程池使用JDK5新增 Executors 工厂类来产生线程池,有如下几个方法:...原创 2019-05-05 15:21:11 · 178 阅读 · 0 评论 -
Java线程学习笔记(1)—— 线程的介绍
1 多线程并行和并发并行:两个任务同时运行(需要多核CPU);并发:两个任务都请求运行,处理器只能接受一个任务,把这两个任务安排轮流进行,由于时间间隔较短,让人感觉同时进行;2 Java程序运行原理Java命令会启动java虚拟机(JVM),等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法一个应用程序有且只...原创 2019-03-22 14:15:49 · 216 阅读 · 0 评论