Java基础面试题(二)

来源:互联网 发布:机械革命 知乎 编辑:程序博客网 时间:2024/05/21 11:07

1.垃圾回收有什么作用,什么时候进行垃圾回收?

1.垃圾回收是为了释放资源,如果不释放资源.那么可能会出现内存溢出的问题,
2.当一个类里面失去了引用,也就是没有人调用,那么这个对象就会被回收

2.如果对象的引用被置为null,那么该对象是否会立即被回收?

不会,在下一个垃圾回收周期中,对象将是可被回收的

3.线程跟进程的区别是什么?

1.进程,进程是一个执行的引用程序,
2.线程,线程是应用程序里的执行序列,一个进程可以有多个线程
线程可以称为轻量进程

4.创建线程的方式有几种?

三种

  1. 实现Runnable的接口
  2. 继承Thread类
  3. 使用Executor框架
    开发中通常使用实现Runnable接口来创建线程,因为java中只支持单继承,在设计引用进行了单继承的情况下,这需要多继承,而java是不允许的,使用Runnable的线程池是非常高效的,也容易使用

5.说出线程所有的执行状态

  1. 新建(创建线程)
  2. 可运行(在main方法调用中,调用了start方法,然后获取到了cpu的执行权)
  3. 运行(获取到了执行权,开始执行)
  4. 阻塞(同步阻塞 加锁 ,等待阻塞 调用线程wait方法,其它阻塞调用sleep等方法)
  5. 死亡 线程执行完毕,被销毁

6.同步方法跟同步代码块的区别

  1. 同步方法默认使用class字节码对象或this作为锁,
  2. 同步代码块比同步方法更加细颗粒度,同步代码块可以选择用什么作为锁,封装有同步问题的一部分区域,而不是整个方法

7.什么是死锁

死锁就是俩个线程都在等待对方线程执行,从而就变成了死锁 结果就是俩个线程都无限等待下去

8.如何确保n个线程访问n个资源不会出现死锁的情况

一种非常简单的解决方法就是,设置锁的顺序,并强制设置线程按指定顺序获取锁,这样的话所有的线程都是指定顺序取锁,指定顺序解锁,就不会出现死锁的情况

9.sleep() 和 wait()的区别

1.线程的sleep方法.翻译过来是睡觉的意思,见名之意,其实就是获取到cpu然后不执行任何操作,也就相当与睡觉, 会占用cpu资源,会增加时间限制,其它线程不能进入

2.线程的wait方法,见名知意,翻译的意思是等待 ,其实就是等待使用cpu,不会执行任何操作, 不会占用cpu资源,其它线程可以进入,不会增加时间限制,

10.实现同步的方式

  • .实现同步方法
    其实就是用synchronized修饰的方法,可以用static修饰,如果用static修饰,那么会锁住整个类
  • 实现同步代码块
    其实就是使用synchronized关键字,从而锁住一块资源,

同步是一种高开销的方式,所以尽量少使用同步
通常没必要锁着整个方法,所以通常使用同快代码块即可

今天就讲那么哆啦,,明天继续抱歉

原创粉丝点击