线程与进程的区别?
进程就是多个线程的集合,每一个线程都是进行的执行路径。
线程的创建方式
1.继承Thread类
2.实现Runnable接口
3.匿名内部类,也是实现Runnable接口
总结:因为java是单继承多实现,所以使用实现比使用继承更灵活。
多线程的状态
1.新建状态 new线程实例的时候;
2.就绪状态 调用start方法返回的时候,还不会立马调用run方法,需要通其他线程竞争到cpu时间;
3.运行状态 执行run方法的时候;
4.阻塞状态 线程运行过程中由于某种原因阻塞了,如:
1>调用sleep方法;
2>调用wait方法,等待唤醒;
3>调用I/O操作被阻塞;
4>试图得到锁,而锁被其他线程所持有;
5.死亡状态 run方法执行完毕,或者run方法出现异常;
什么是线程安全问题
多个线程同时共享一个全局变量并进行写的操作,可能会发成数据冲突,就是线程安全问题。做读取操作不会有线程安全问题;使用同步或者lock锁啦解决线程安全问题;
synchronized使用
1>同步代码块,将可能会发生线程安全的代码使用synchronized关键字进行包装;
2>同步方法,使用synchronized修饰方法,使用的是this锁;
3>静态同步代码块,使用的锁是 类名.class;