如何创建线程 第一种
|-- 声明一个类,继承Thread类,并覆盖run方法
|-- 建立子类的对象,相当于创建了一个线程
|-- 如何开启和运行线程,需要调用线程的start()方法
|-- start()启动一个线程,JVM调用线程的run()方法
|-- 为什么继承Thread 覆盖run方法
|-- 继承Thread,子类变成了线程类
|-- 覆盖run方法,java工程师,后期不知道线程要运行的代码是什么
|-- 提供了一个方法,让你来覆盖run,覆盖后,JVM会自动的调用线程的run
第二个创建线程的方式 实现Runnable接口
|-- 定义类,实现Runnable接口
|-- 覆盖接口的抽象方法 run
|-- 建立Thread对象,在Thread构造方法中,传递Runnable接口的实现类对象
|-- 调用Thread对象start()方法
多线程操作共享数据的安全隐患
|-- 当多个线程,操作同一共享数据的是,存在安全隐患
|-- 也是开发多线程程序中,最头疼的问题
|-- 程序人员,必须保证数据的准确性
|-- 解决多线程操作共享数据的安全问题,使用同步技术来解决问题
|-- 同步技术,当线程去操作数据的时候,一个线程不操作完毕,其余的线程无法进行操作
|-- 同步代码块:格式
synchronized(对象){
//线程操作的共享数据
}
|-- 保证多线程运行,持有锁的线程才能运行,没有锁的线程,只能等待,临时阻塞 |