1.垃圾回收有什么作用,什么时候进行垃圾回收?
1.垃圾回收是为了释放资源,如果不释放资源.那么可能会出现内存溢出的问题,
2.当一个类里面失去了引用,也就是没有人调用,那么这个对象就会被回收
2.如果对象的引用被置为null,那么该对象是否会立即被回收?
不会,在下一个垃圾回收周期中,对象将是可被回收的
3.线程跟进程的区别是什么?
1.进程,进程是一个执行的引用程序,
2.线程,线程是应用程序里的执行序列,一个进程可以有多个线程
线程可以称为轻量进程
4.创建线程的方式有几种?
三种
- 实现Runnable的接口
- 继承Thread类
- 使用Executor框架
开发中通常使用实现Runnable接口来创建线程,因为java中只支持单继承,在设计引用进行了单继承的情况下,这需要多继承,而java是不允许的,使用Runnable的线程池是非常高效的,也容易使用
5.说出线程所有的执行状态
- 新建(创建线程)
- 可运行(在main方法调用中,调用了start方法,然后获取到了cpu的执行权)
- 运行(获取到了执行权,开始执行)
- 阻塞(同步阻塞 加锁 ,等待阻塞 调用线程wait方法,其它阻塞调用sleep等方法)
- 死亡 线程执行完毕,被销毁
6.同步方法跟同步代码块的区别
- 同步方法默认使用class字节码对象或this作为锁,
- 同步代码块比同步方法更加细颗粒度,同步代码块可以选择用什么作为锁,封装有同步问题的一部分区域,而不是整个方法
7.什么是死锁
死锁就是俩个线程都在等待对方线程执行,从而就变成了死锁 结果就是俩个线程都无限等待下去
8.如何确保n个线程访问n个资源不会出现死锁的情况
一种非常简单的解决方法就是,设置锁的顺序,并强制设置线程按指定顺序获取锁,这样的话所有的线程都是指定顺序取锁,指定顺序解锁,就不会出现死锁的情况
9.sleep() 和 wait()的区别
1.线程的sleep方法.翻译过来是睡觉的意思,见名之意,其实就是获取到cpu然后不执行任何操作,也就相当与睡觉, 会占用cpu资源,会增加时间限制,其它线程不能进入
2.线程的wait方法,见名知意,翻译的意思是等待 ,其实就是等待使用cpu,不会执行任何操作, 不会占用cpu资源,其它线程可以进入,不会增加时间限制,
10.实现同步的方式
- .实现同步方法
其实就是用synchronized修饰的方法,可以用static修饰,如果用static修饰,那么会锁住整个类 - 实现同步代码块
其实就是使用synchronized关键字,从而锁住一块资源,
同步是一种高开销的方式,所以尽量少使用同步
通常没必要锁着整个方法,所以通常使用同快代码块即可
今天就讲那么哆啦,,明天继续抱歉