Java高级(全)
Thread类常用方法
Thread类
补充上面多线程的方法
Thread类的构造方法

Thread类常用方法

参考代码
1 | package com.itheima.demo01_Thread; |
多线程安全问题
概述
- 多线程安全就是当多个线程操作共享资源的时候,出现的逻辑错误,就是安全问题;我们应该通过技术手动避免这种问题的发生!
产生原因
- 有多线程;
- 有共享数据;
- 有数据修改;
解决的思路
- 让多个线程”排队操作共享数据”即可;
取款案例思路分析

取款案例代码实现(出现安全问题)
1 | /* |
取款案例的安全问题分析

同步代码块
- 概述
- 通过关键字synchronized配合一个唯一的锁对象,可以把需要”排队”执行的代码块包裹起啦,从而保证多线程的安全执行;
参考代码
1 | /* |
注意事项
- 一般使用资源对象当成锁对象;
- 必须保证锁对象要唯一,否则无效!
同步方法
- 概述
- 当同步代码块中所有的代码刚好在某个方法内完成的时候,为了增强代码的可读性,可以把整个方法加上 synchronized;
参考代码
1 | /* |
Lock接口
- 概述
- lock接口是对synchronized的优化,可以保证既能锁定的代码范围灵活,也能保证代码的可读性;但是不能自动释放锁,所以为了保证释放锁的行为一定要执行,需要使用 try{}finally{}代码块把释放锁的行为放在 finally中完成;
参考代码
1 | /* |
线程通信
概述
- 就是多个线程在操作共享资源的时候,可以相互通信,根据不同线程的状态,协调完成任务 ;
通信相关的方法

注意事项
只有锁对象,才能调用上面的方法,否则出异常;
包子案例的思路分析

包子案例的代码实现
共享资源类
1 | /* |
厨师任务类
1 | /* |
吃货任务类
1 | /* |
测试类
1 | /* |
线程池
概述
- 就是保存多个线程对象的池子;
作用
- 可以提升程序的运行性能;(重复利用线程,节约了频繁创建和销毁线程对象的时间)
- 可以保证服务器的压力;(当达到规定的上限时,可以拒绝服务)
线程池接口规范
- ExecutorService
实现类
- ThreadPoolExecutor
实现类的7个参数介绍

- 获取线程池的两种方式
- 自己直接new ThreadPoolExecutor(7个参数);// 这是推荐的方式,因为更安全,配置的更详细;
- 利用工具类 Executors中的静态方法 ;(不推荐,有风险)
自己创建线程池
1 | /* |
- 线程池的常用方法

线程池执行不带返回值的任务
1 | package com.itheima.demo08_ThreadPool; |
线程池执行带返回值的任务
1 | package com.itheima.demo08_ThreadPool; |
Executors工具类(了解)
- 概述
1 | 可以帮我们快速创建线程池对象,但是不安全,不推荐使用; |
- 常用方法

线程状态和转换

当懒汉式单列设计模式遇上多线程
1 | /* |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


