1.打印昨天的当前时刻
public static void main(){
//1.获取日历函数的当前时刻
Calendar cal= Calendar.getInstance();
//2.给日期减一天
cal.add(Calendar.DATE,-1);
system.out.println(cal.getTime());
}
2.List、Set、Map是否继承自Collection接口?
1.Collection是单例集合的顶层接口,单列集合按照特征分为两类。
一类是无序不重复,即Set集合,一类分为有序可重复,即List集合,list集合有序的原因是他有索引
Set集合按照是否需要排序分为HashSet和TreeSet,HashSet是无序的,但是LinkedHashSet里面的顺序是按照添加的顺序来的
List集合又分为ArrayList和 LinkedList,ArrayLIst的底层结构是数组(查找和更改的速度快),而LinkedList(增加和删除的速度快)的底层结构是链表
map集合是双列集合的顶层接口,其中map集合分为HashMap和TreeMap,其中HashMap是无序的,但是LinkedHashMap是有序的
3.线程的基本状态以及状态之间的关系?
java线程汇总的五种基本状态:
1.新建状态
当线程对象对创建后,即进入了新建状态。如
2.就绪状态
当调用线程对象的start()方法,线程就进入了就绪状态,处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程就会执行
3.运行状态
当CPU开始调度处于就绪状态的线程的时候,此时线程才得到真正的执行,即进入到运行状态。就绪状态是进入到运行状态的唯一入口,也就是说,线程想要进入运行状态执行,首先必须处于就绪状态中
4.阻塞状态
1.等待阻塞:运行中的线程执行wait方法,让本线程进入到等待阻塞状态;
2.同步阻塞:线程在获取synchronzied同步锁失败,它会进入同步阻塞
3.其他阻塞:通过调用线程的sleep方法或join()或发出IO请求时,线程会进入到阻塞状态。当sleep()终止,线程就会转入就绪状态
5.销毁状态
线程执行完了或者因为异常退出了run方法,该线程结束生命周期
几种之间的关系描述:
就绪状态转换为运行状态:当此线程得到处理器资源时
运行状态转换为就绪状态:线程主动调用了yield()方法或者在运行中市区处理器资源
运行状态转换为死亡状态:线程执行完毕或者线程发生了异常
4.Java中sleep方法和wait方法的区别?
他们都是使得线程暂停执行一段时间的方法。wait()也是一种使线程暂停执行的方法。例如:
1.首先sleep方法属于Thread类,而wait方法属于Object类
2.对锁的处理机制不同。由于sleep方法的主要作用是让线程暂停执行一段时间,时间一到自动回复,不涉及线程间的通信,因此,调用sleep方法并不会释放锁。而wait方法不同,当调用wait()方法后,线程会释放掉他所占用的锁,从而使线程所在对象中也synchronized数据可以被其他线程使用
3.使用区域不同,wait()方法必须放在同步控制方法和同步代码块中使用,sleep方法则可以放在任何地方使用。sleep()方法必须捕获异常.