总结
线程
-
线程创建方式一:
- 继承Thread类(实现Runnable接口)
- 继承Thread类
- 重写run方法
- 创建子类对象
- 调用start方法(这个方法是Thread里面的方法)
-
创建线程的方式二:
- 写一个类实现Runnable
- 重写run方法
- 创建类的对象
- 将对象作为实例后Thread对象的参数传递
- 调用start方法
start方法是开启一个新的线程,会自动调用run方法
-
Thread类中常用方法:
- currentThread 获取当前线程对象
- setName 设置线程名字
- getName 获取线程名字
- setPriority 设置优先级
- getPriority 获取优先级
- sleep 使当前线程睡眠多少毫秒
线程安全
-
当多个线程访问同一资源时,如果没有做限制,会出现线程安全问题
-
解决线程安全的方式:
方式一:使用synchronized 同步、效率低、监听对象要保证唯一性
同步代码块:
synchronized(监听对象){
会出现线程安全的代码
}
关于监听对象:
1.Runnable的实现类可以用this,Thread的继承类不能用this,不能保证唯一性
2.static修饰的对象可以,实现类里可以不用写,因为只创建了一个对象
3.常量池中的字符串可以
4.类锁可以:类名.class和对象名.getClass()
同步方法:
public后面加一个synchronized修饰,相当于this,再加个static就相当于一个类锁
方式二:jdk1.6之后可以用Lock接口的实现类 ReentrantLock
使用方法:
Lock l = new ReentrantLock();
l.lock();//开锁
try{
存在线程安全的代码
}finally{
l.unLock()//关锁
}
synchronized的锁会自动释放,lock的锁要手动释放