进程和线程得区别:
- 进程是资源分配得最小单位
- 进程是资源分配得最小单位
多线程的作用:
可以有效的提高程序的效率
多线程使用的常见场景
- 非常耗时的操作 例如:io操作
- Web开发处理的响应和请求
- 后台任务
- 分布式计算
多线程的声明周期
一.准备状态
new一个Thread的实例出来,线程就进入的初始状态。
二.就绪状态
创建了线程对象后,其他线程调用了此线程的start()方法,就变得可运行了。
三.运行状态
就绪状态的线程获取了CPU,执行程序代码。
四.阻塞状态
1.等待阻塞
运行线程执行wait()方法
2.同步阻塞
运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
3.其他阻塞
运行的线程执行sleep()或join()方法
五.死亡状态
线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
线程同步
1.使用Synchronized关键字使线程运行时有序进行(线程锁)修饰锁对象
2.普通方法
3.静态方法
4.锁类(不推荐使用性能太差)
什么时候使用同步
1.多个线程执行的时候需要同步,如果是单线程则不需要同步。
2.多个线程在执行的过程中是不是使用同一把锁。
使用步骤
1.继承Thread类重写run方法
2.实现Runnble接口重写run方法(推荐)
3.使用匿名内部类来实现,创建Thread对象,在构造方法里实现new Runnble()