程序基础知识问答记录

1.  问 :为什么Thread.sleep(long millis)、t.join()和“等待用户输入”属于阻塞队列,而obj.wait()属于等待队列?

(下图引用自:http://blog.csdn.net/pange1991/article/details/53860651)

答:Thread.sleep(long millis)、t.join()和“等待用户输入”这些操作在执行时都不释放对象锁,所以进入阻塞队列;而obj.wait()会释放对象锁,所以进入等待队列。

线程共包括以下5种状态。
1. 新建状态(New)
  线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。
2. 就绪状态(Runnable)
  也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。
  例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。
3. 运行状态(Running)
  线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
4. 阻塞状态(Blocked)
  阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    (01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。
    (02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
    (03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。
       当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5. 死亡状态(Dead)
  线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

参考:【Java多线程】线程状态、线程池状态

 

 

2. 四种引用类型

强软弱虚(记忆:强 变得 软弱 变得 虚)

强:正常创建的对象,只要引用存在,永远不会被GC回收,即使OOM

Object obj = new Object();

软:内存溢出之前进行回收,GC时内存不足时回收,如果内存足够就不回收

Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
sf.get();//有时候会返回null

弱:每次GC时回收,无论内存是否足够

Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
wf.get();//有时候会返回null

虚:每次垃圾回收时都会被回收,主要用于监测对象是否已经从内存中删除

Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj);
obj=null;
pf.get();//永远返回null
pf.isEnQueued();//返回是否从内存中已经删除

参考:《Java强软弱虚四种引用的使用场景

 

3. 接口和抽象类有什么区别?

  • 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
  • 实现数量:类只能继承一个抽象类;但是可以实现很多个接口。
  • 访问修饰符:抽象类中的方法可以是任意访问修饰符;接口中的方法默认用 且 只能用 public 修饰。
  • 构造函数:抽象类可以有构造函数;接口不能有。
  • main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
  • 方法体:接口中如果要写方法体,函数需要用default修饰。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值