基础知识点:
获得多线程的方法:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口:这里需要将实现了Callable接口的实现类进行包装成FutureTask,然后再new Thread (futureTask);
线程的生命周期:
- 新建状态:Thread t = new MyThread();
- 就绪状态:t.start();
- 运行状态:线程真正开始执行。
- 阻塞状态:运行中的线程由于某种原因暂时放弃对CPU的使用权,停止执行
- 死亡状态:
线程的锁机制:
- 一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,锁的是当前对象this
- 所有的非静态同步方法用的都是同一把锁——实例对象本身
- 所有的静态同步方法用的也是同一把锁——类对象本身
注:静态同步方法与非静态同步方法之间是不会有竞态条件的。
小坑知识点:
线程中断
- 调用interrupt方法,通知线程应该中断了:
如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出了一个InterruptedException异常。(坑点:并不会设置中断标记)
如果线程处于正常活动状态,那么会将该线程的中断标志设置为true。被设置中断标志的线程将正常运行,不受影响。 - 使用volatile boolean类型变量控制;