线程暂停的方法、基本数据类型包装类、十进制单精度浮点数(32位)存入内存中、TreeSet和TreeMap...

本文详细介绍了Java中使线程暂停执行的多种方法,包括Thread.sleep(), Object.wait(), Thread.yield()及使用Lock接口;同时解析了Byte, Character等数据类型包装类的常量池机制,并解释了浮点数在内存中的存储形式。

使线程暂停执行的方法?

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接口,等于临时提供了排序规则。

 

转载于:https://www.cnblogs.com/shadow-demo/p/8179832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值