使线程暂停执行的方法?
1.Thread类的sleep()方法使线程进入阻塞状态,睡眠指定的时间段。
2.Object类的wait()方法使线程放弃对象锁,进入等锁池,直到获得对象锁后才继续往下执行
3.Thread类的yield()方法平时比较少用,使线程进入就绪状态而不是阻塞状态,也就是说下一个执行的线程可能还是这个线程,当然也可能让给了其他的线程,那么这个线程就暂停了。
4.Java5后的使用Lock接口也可以实现类似于对象锁的功能,优点是比较灵活、可以知道线程获得锁了没有等,比较大的缺点是需要手动释放锁,如果没有释放可能会造成死锁。
八大数据类型的包装类中哪几个使用了常量池机制?
Byte,Character,Short,Interger,Long。其中Character类的常量池(数组)大小为128,其他四个类的常量池大小为256,当使用类似于Integer i = 1;这样的赋值语句就会使用常量池,将和他等值得对象赋值给他,而不是创建新的对象,前提是赋值的范围是-128~127,也就是说:
Integer n1 = 100,n2 = 100,n3 = 150,n4 = 150;
System.out.print(n1 == n2); //true 两个变量指向的地址相同
System.out.print(n3 == n4); //false 两个变量指向的地址不同
P.s. byte的范围本就是-128~127也就是直接赋值的话(而不是new)必然使用常量池。
浮点数6.125在内存中的形式?
浮点数在内存中符号位(1bit),指数符号位(1bit),指数位(7bit)和尾数位(23bit)组成
第一步
十进制的6.125先转换为二进制,6-->0110。
0.125乘2得 0.25 取 0
0.25乘2得0.5 取 0
0.5乘2得1 取1
0.125-->0.001
(ps.二进制小数如何转换为十进制:
小数点后的第n个数乘以2的负n次方后全部相加:
以0.001为例 0 x 1/2 + 0 x 1/4 + 1 x 1/8 = 0.125)
第二步
浮点数的最高位表示正负,1为正,0为负
第二高位高位表示指数的正负,1为正,0为负
110.001 = 1.10001 x 2 x 2
指数是4-->0000 100 (七位二进制)
最终的结果为
1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
TreeSet和TreeMap存储的对象要求实现了comparable接口,因为这两个存储的对象都是有序的,实际上TreeSet内部也实现了Map。
Collections 是个工具类(和集合接口 Collection区分开),sort提供两个重载sort(list)和sort(list,obj) 前者要求list中存储的对象实现了comparable接口,后者 没有这个要求但obj不需实现了comparor接口,等于临时提供了排序规则。