一、线程与线程
一个进程里面包含多个进程,线程就是程序运行最小单位
二、创建线程的两种方式
2.1、方法一(继承Thread类)
- 创建一个类,继承Thead,覆写run方法
- 创建对象,对象名.start(开启一个独立线程,等待被cpu选中,选中以后自己回去调用对象里面的run方法)
2.2、启动线程时候:调用run和start有什么区别?
调用run就不是开启线程去运行,仅仅只是简单的对象调用方法
2.3、方法二(实现Runable的方式)
- 创建一个类,实现Runable接口,覆写run方法
- 创建实现类对象作为参数传入Thread对象里面,并且调用start方法
2.4、觉得哪种好?
继承好,因为java是单继承多实现
三、线程同步【解决线程安全问题的方案】
3.1、理解线程安全问题
多个线程同时操作共享数据的时候,因为并发造成数据不正确的情况
3.1、解决方法一: 同步代码块
3.1.1 语法
synchronized (同步对象){
会发生线程问题的代码
}
同步对象:
TicketThread.class 【推荐】 当前类的class对象
可以写同步的资源
3.1.2 同步代码块的作用
多个线程执行到此处就开始排队
3.2、解决方法二:同步方法
3.2.1、使用方法
在方法修饰符后面添加synchronized
3.2.2、注意
该方法不能用于继承,只能用于实现
3.3、解决方法三:Lock锁
3.3.1学习方法
(查找API文档方式)锁-- Lock(API)接口 ---XXX实现类