Thread和Runnable区别
- Thread实现了Runnable接口,在执行多线程之前还分配了CPU资源,检查线程是否启动等事情,然后再执行线程。
- Runnable适合多个相同程序代码的线程去处理同一个资源。
- Runnable接口可以避免Java单继承的局限。
- Runable增加了程序的健壮型,代码能够被多个线程共享,数据和代码是独立的。
线程状态
五种状态:创建,就绪,运行,阻塞,终止。
线程使用start()后不会立刻启动,而是处于就绪状态,等待CPU调度后才开始。
进程和线程的区别
- 线程在进程基础上划分。
- 线程消失,进程还继续。进程消失,线程结束。
- 进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。
- 线程是进程的实体,是CPU调度和分派的基本单位,比程序更小的能独立运行的基本单位。
多线程实现的两种方式
- 继承Thread
- 实现Runnable接口
线程启动
通过start()方法完成,需要进行CPU调度,调用start()实际上是run()方法。
线程终止
- stop(),容易有问题,已经过时
- volatile变量当作控制条件,控制线程执行。
- interrupt来使处于sleep() wait()等状态的线程终止。
- 用Future的cancel方法也可以终止线程。
多线程中建议使用Runnable接口实现,这样可以避免由单继承所带来的开发局限,使用Runnable接口可以达到资源共享的目的。