线程开启的方式
* 方式一 (继承Thread)
1. 定义类继承Thread
2. 重写run方法
3. 创建Thread的子类对象
4. 调用start方法开启线程
* 线程开启的方式2 (实现Runnable接口)
1. 定义类实现Runnable接口
2. 重写run方法
3. 创建Runnable实现类对象
4. 创建Thread对象,将Runnable实现类对象传入Thread构造
5. Thread对象调用start方法开启线程
* Thread常用功能:
String getName() 获取线程的名称
void setName(String name) 设置线程的名称
static void sleep(long millis) 让执行该代码的线程睡眠指定毫秒值
static Thread currentThread() 获取正在执行此代码的线程
线程安全问题
* 出现的原因:多线程操作共享数据
* 解决线程安全问题的三种方案:
1. 同步代码块:
synchronized(锁对象) {
// 有可能出现线程安全问题的代码
}
2. 同步方法:
把有线程安全问题的代码提取成一个方法,在修饰符上加一个synchronized
非静态同步方法的锁对象默认是:this
静态同步方法的锁对象默认是:当前类.class
3. Lock锁
Lock lock = new ReentrantLock();
在需要同步的代码前调用lock()获取锁
在需要同步的代码后调用unlock()释放锁
|
|