Java基础进阶Day06
课程大纲
1、线程回顾 -------------------------> 理解 (两种格式、相关方法)
2、线程安全 -------------------------> 重点 (安全问题、三种解决)
3、线程状态 -------------------------> 了解 (状态图)
第一章 线程回顾
1、线程创建方式
A、继承Thread类
B、实现Runnable接口(推荐使用)
格式变化:可以采用匿名内部类方式创建线程
2、相关方法
A、构造方法
public Thread() //分配一个新的线程对象。
public Thread(String name) //分配一个指定名字的新的线程对象。
public Thread(Runnable target) //分配一个带有指定目标新的线程对象。
public Thread(Runnable target,String name) //分配一个带有指定目标新的线程对象并指定名字
B、常用方法
public String getName() //获取当前线程名称。
public void start() //导致此线程开始执行; Java虚拟机调用此线程的run方法。
public void run() //此线程要执行的任务在此处定义代码。
public static void sleep(long millis) //正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
public static Thread currentThread() //返回对当前正在执行的线程对象的引用
第二章 线程安全
1、安全问题
A、问题实例:
售票问题
B、问题特征:
多个线程、共享数据、修改数据(增删改)彼此影响
2、解决方案
A、同步代码块
a. 格式:
synchronize(锁对象){ .... }
b. 说明:
非静态代码块锁对象是 this
静态代码块锁对象是 类名称.class
B、同步方法
a. 格式:
修饰符 synchronize 返回值类型 方法名称(参数列表){ ... }
b. 例如:
public synchronize void method(){ .... }
C、锁对象
a. 格式:
Lock mlock = new ReentrantLock(); //【1】定义成员位置(获取锁对象)
mlock.lock(); //【2】在数据变化前加锁(加锁)
mlock.unlock(); //【3】在数据变化后解锁(解锁)
第三章 线程状态
1、常见状态(官方六种状态)
a. New 新建(例如:刚刚买的新车,还未驾驶)
b. Runnable 可运行(例如:驾驶车)
c. Blocked 锁阻塞(例如: 走在路上,堵车了)
d. Waiting 无限等待(例如: 车子由于违停的情况,被交警拖走了,需要通知取车)
e. Timed Waiting 计时等待(例如: 车子走在路上,等待红绿灯,红灯倒计时结束)
f. Teminated 被终止(例如:车子使用完毕,卖出去了,销毁了)