Thread的构造器
线程的休眠时间
public static void sleep(long time)
,当前线程休眠指定的时间后再继续执行,单位为毫秒- 静态方法是属于类的,直接可以用类名来调用
Thread.sleep(199)
- 项目经理让我加上这行代码,如果用户愿意交钱,我就注释掉这项代码
- 总结:
String getName()//获取带你给钱线程的名称,默认县城名称是Thread索引
void setName(String name)//设置线程的名称
public static Thread currentThread()// 返回当前正在执行的线程对象的索引
public static voidsleep(long time)//让线程休眠指定的时间,单位为毫秒
public void run () //线程任务方法
public void start()//线程启动方法
2. Thread常用方法、构造器。
public Thread(String name)//可以为当前线程指定名称
public Thread (Runnable target)//把Runnable对象交给线程对象
public Thread(Runnable target)//把Runnable对象交给线程对象
public Thread (Runnable target ,String name)//把Runnable对象交给线程对象,并指定形成名称
线程安全问题
- 多个线程同时操作一个共享资源的时候可能会出现业务安全问题,称为线程安全问题
- 锁对象的规范要求
- 规范上:建议使用共享资源作为锁对象
- 对于实例方法建议使用this作为锁对象
- 对于静态方法建议使用哦个字节码(类名.class)对象作为锁对象
- 同步方法底层原理
- 同步方法其实底层也是有隐式锁方法的,只是锁的范围是整个方法代码
- 如果方法是实例方法:同步方法默认用this作为锁对象,但是代码要高度面向对象
- 如果方法是静态方法:同步方法默认用类名.class作为锁的对象
- 同步方法和同步代码块那种同步方法比较好?
- 同步代码块锁的范围比较小,同步方法锁的范围更大
- 对和新方法使用
synchronized
修饰
Lock锁
是接口不能直接用,需要实现类来使用
- 为了更加清晰的表达如果枷锁和释放锁,
线程通信
线程池
- 什么是线程池
- 线程池就是一个可以服用线程的技术
- 不使用线程池的问题
- 如果用户每发起一个请求,后台就创建一个新的线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
- 线程池的API
- 如何得到线程池对象
- 使用
ExecutorService
的实现类ThreadPoolExecutor
自创建一个线程池对象, - 使用
Executors
(线程池的工具类)调用方法返回不同特点的线程池对象
- 临时线程什么时候创建?
- 新任务提交时发现核心线程都很忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程
- 什么时候会开始拒绝任务?
- 核心线程和临时线程都再忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝