线程实现方式
- 实现runnable接口,同时new一个thread构造器参数为runnable实现类,start即可
- 继承thread类,start即可
- 通过future和callable实现可以又返回值的线程。thread构造器中传入future对象,该对象的构造器中传入callable的匿名内部类
线程控制
- join 主线程等待子线程执行完毕后再执行
- setDemon 设置线程为守护线程,前台线程死亡,该线程死亡
同步代码块、方法
- 同步方法 方法修饰符为synchronized,既调用该方法的对象如果没有执行完则其他线程不能操作,锁对象为this即调用该方法的对象
- 同步块 synchronized某对象
uncaughtException - 线程自定义异常处理器,实现UncaughtException即可,在实现方法中执行异常后处理
线程池
- 线程池状态
running shundown stop treminated
构造时需指定核心线程池大小、最大线程池大小,阻塞队列,线程完成销毁时间
需要创建线程时向线程池询问是否能加入,根据当前线程多少决定是否加入,如果超额,则加入阻塞队列中。阻塞队列不能加入则根据最大线程数决定是否加入该线程,如果依旧不能,则拒绝加入该线程 - FrokJoin
将大任务拆分为小任务,需界定多小,通过静态变量决定,以及需要指明多少任务即start和end
Lock锁
- 通过lock.lock锁,unlock解锁
- 死锁即两个乃至多个线程相互等待的情况
线程通信
- wait设置线程阻塞,通过notify唤醒线程
- 如果是通过lock锁住对象则需要condition对象来控制通信,cond.await阻塞线程,cond.single来唤醒线程
阻塞队列
常用生产者消费者模式,以及线程池会涉及。在操作队列时有四种状态,返回异常、特定值、阻塞以及在不超过指定时间的阻塞