阅读背景:

多线程基础篇 - JavaEE初阶 - 细节狂魔

来源:互联网 

文章目录 前言 线程是什么? Java中执行多线程编程 下面我们在 idea 中实践 准备工作 : 在 idea中 创建一个 Java 项目 Thread 类的基本方法 拓展 Thread 类创建线程的写法 1、最基本的创建线程的办法 2、创建 一个类 实现 Runnable 接口,再创建Runnable实例 传给 Thread 实例 写法 3 和 写法 4 :就是上面两种写法的翻版 - 使用了匿名内部类。 写法3 写法4 小结 写法五 多线程的优势 我们下面一起来实践一下 总程序 Thread 类常见方法 Thread 的常见构造方法 Thread(String name) - 创建线程对象,并命名 Thread 的几个常见属性 是否后台线程 - isDaemon() 是否存活 - isAlive() Thread 中的一些重要方法 start 方法 - 启动线程 经典面试题: start 与 run方法 的区别 中断一个线程 让线程结束有以下几个方法: 1、可以手动的设置一个标志位(自己创建一个变量,boolean 和 int 类型都行),来控制线程是否要执行的结果。 2、使用 Thread 中内置的一个标志位来进行判断来进行判定(比第一种方法更好) 线程等待 获取当前线程引用 线程休眠 线程的状态 1、NEW: 安排了工作, 还未开始行动 2、TERMINATED: 工作完成了. 小结 3、RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作. 4、TIMED_WAITING: 这几个都表示排队等着其他事情 5、BLOCKED: 这几个都表示排队等着其他事情 6、WAITING: 这几个都表示排队等着其他事情 注意 线程状态和状态转移的意义 线程状态转换简略图 线程安全问题 - 重中之重 一个线程不安全的典型案例 解析 如何解决线程安全问题? 加锁 - synchronized 现在我们回过头来看,什么情况线程会不安全? 产生线程不安全的原因如下: 1、线程是抢占式执行,线程间的调度充满着随机性。【造成线程不安全的直接原因,而且是无法解决的问题】 2、**多个线程**对==同一个变量==进行==修改操作==。 解决办法 3、针对变量的操作不是原子的 4、内存可见性,也会影响到线程安全。 代码示例:针对 内存可见性 的线程安全问题 解决办法 1、加锁操作:使用 synchronized 关键字 2、volatile 关键字 - 必须会读会写这个关键字 5、指令重排序 小结 重点解析 - synchronized 关键字 - 监视器锁 monitor lock synchronized 的 使用方式 1、直接修饰 普通方法。 2、修饰一个代码块 3、修饰一个静态方法 刷新内存 可重入 拓展 :死锁的其他场景 1、一个线程。一把锁 两个线程,两把锁 N个线程了,M把锁。 小结:死锁的四个必要条件 Java标准库中的线程安全类 线程不安全的类 线程安全的类 volatile 关键字 volatile 能保证你内存可见性 volatile 和 synchronized 的区别 - 面试会问到。 wait 和 notify :等待 和 通知 notifyAll 小结 关于多线程的案例 1、实现一个线程安全版本的单例模式 单例模式 单例模式的两种典型实现 1、饿汉模式 2、懒汉模式 拓展:进一步帮助你们理解 饿汉 和 懒汉模式 回过头,以上这些只是作为铺垫,真正要解决的问题是 实现一个线程安全的单例模式 案例二:阻塞队列 了解Java中 阻塞队列 的一些主要用法 模拟实现阻塞队列 总程序 为了观察程序的效果,我们再利用 阻塞队列 来构造一个 生产者和消费者模型 总程序(完整的生产者消费者模型 + 阻塞队列) 案例三 :定时器 标准库的定时器用法, 如何自己实现一个定时器 1、描述任务 组织任务 3、执行时间到了的任务 写到这里,上述代码中存在两个非常严重的问题!!! 总程序 案例四 :线程池 Java 保准库中,线程池的使用。 模拟实现一个线程池 - 基于 Executors来实现上面图片的效果 总程序 效果图 本文结束 文章目录 前言 线程是什么? Java中执行多线程编程 下面我们在 idea 中实践 准备工作 :



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: