一、 线程的定义和创建
1、进程和线程
- 进程(process):进程是指一种正在运行的程序,有自己的地址空间;
特点:动态性,并发性,独立性 - 线程(thread):进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。
特点:轻量级进程,独立调度的基本单位,共享进程资源,可并发执行 - 并发和并行区别:
并发:一个CPU,执行多个任务
并行:多个CPU,执行多个任务
2、线程的定义和创建:
- 继承Tread类:
优点:简单
缺点:不能再继承其他类 - 实现Runnable接口:
优点:可以继承其他类
缺点:较为复杂 - 实现Callable接口(call方法有返回值):
优点:可以继承其他类,可以有返回值(可以带泛型),可以抛出检查异常,借助FutureTask
缺点:复杂
二、线程控制
1、线程的生命周期
2、线程控制
- join:阻塞指定线程等到另一个线程完成以后再继续执行。
- sleep:使线程停止运行一段时间,让出CPU,将处于阻塞状态。
- yield:让当前正在执行线程暂停,不是阻塞线程,而是将线程转入就绪状态。
- setDaemon:当主线程结束 此线程 自动结束,只能在线程启动之前把它设为后台线程。
- interrupt:并没有直接中断线程,而是需要被中断线程自己处理。
- stop:结束线程,不推荐使用。
三、线程同步
1、线程同步(thread synchronized):
当两个或两个以上线程访问同一资源时,需要某种方式来确保资源在某一时刻只被一个线程使用。
2、实现线程同步的三种方法:
- 同步代码块
- 同步方法
- 锁
3、ReadWriteLock读写锁
ReadWriteLock是一个接口,ReentrantReadWriteLock是它的实现类,该类中包括两个内部类ReadLock和WriteLock,这两个内部类实现了Lock接口。