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

Posted shadow-demo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程暂停的方法基本数据类型包装类十进制单精度浮点数(32位)存入内存中TreeSet和TreeMap相关的知识,希望对你有一定的参考价值。

使线程暂停执行的方法?

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

 

以上是关于线程暂停的方法基本数据类型包装类十进制单精度浮点数(32位)存入内存中TreeSet和TreeMap的主要内容,如果未能解决你的问题,请参考以下文章

js浮点数精度误差问题,解决方法

Shader基础

两大基本数据类型 - 整数类型 / 浮点数类型

基本数据类型float和double的区别

Java基础

在python中 float是啥意思?