1.String为什么要设置成不可变的
(1).字符串常量池的需要(2).允许String对象缓存HashCode
在Java程序中String类型是使用最多的,这就牵扯到大量的增删改查,每次增删改差之前其实jvm需要检查一下这个String对象的安全性,就是通过hashcode,当设计成不可变对象时候,就保证了每次增删改查的hashcode的唯一性,也就可以放心的操作。
(3).安全性
网络连接地址URL,文件路径path通常情况下都是以String类型保存, 假若String不是固定不变的,将会引起各种安全隐患。就好比我们的密码不能以String的类型保存,,如果你将密码以明文的形式保存成字符串,那么它将一直留在内存中,直到垃圾收集器把它清除。而由于字符串被放在字符串缓冲池中以方便重复使用,所以它就可能在内存中被保留很长时间,而这将导致安全隐患
2.sleep和wait的区别
(1).sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。(2).sleep不会释放锁,它也不需要占用锁。wait会释放锁,必须在synchronized中。
(3).它们都可以被interrupted方法中断。
sleep()是和其他线程在CPU层面上竞争,wait()是在线程级别上竞争。