javase-08-09-多线程&线程安全

84 阅读1分钟

一、线程与线程

一个进程里面包含多个进程,线程就是程序运行最小单位

二、创建线程的两种方式

2.1、方法一(继承Thread类)

  • 创建一个类,继承Thead,覆写run方法

image.png

image.png

  • 创建对象,对象名.start(开启一个独立线程,等待被cpu选中,选中以后自己回去调用对象里面的run方法)

image.png

image.png

2.2、启动线程时候:调用run和start有什么区别?

调用run就不是开启线程去运行,仅仅只是简单的对象调用方法

2.3、方法二(实现Runable的方式)

  • 创建一个类,实现Runable接口,覆写run方法

image.png

  • 创建实现类对象作为参数传入Thread对象里面,并且调用start方法

image.png

2.4、觉得哪种好?

继承好,因为java是单继承多实现

三、线程同步【解决线程安全问题的方案】

3.1、理解线程安全问题

多个线程同时操作共享数据的时候,因为并发造成数据不正确的情况

3.1、解决方法一: 同步代码块

3.1.1 语法

 synchronized (同步对象){
                会发生线程问题的代码
        }

同步对象:
TicketThread.class 【推荐】 当前类的class对象 可以写同步的资源

3.1.2 同步代码块的作用

多个线程执行到此处就开始排队

image.png

3.2、解决方法二:同步方法

3.2.1、使用方法

在方法修饰符后面添加synchronized

image.png

3.2.2、注意

该方法不能用于继承,只能用于实现

3.3、解决方法三:Lock锁

3.3.1学习方法

(查找API文档方式)锁-- Lock(API)接口 ---XXX实现类

image.png

image.png

image.png

3.3.2使用

image.png