1、局部匿名内部类要使用局部变量,必须是final类型
2、进入阻塞状态的线程(如Thread.sleep(1000)),如何被强制中断阻塞状态(如调用该线程的interrupt()方法),会抛出InterruptedException异常
3、线程的状态
New 创建
Runnable 可执行状态(线程就绪,出cpu外其他资源都已就绪)
Running 运行状态
Block 阻塞状态(主动阻塞 Sleep,被动阻塞 IO Block)
4、yield() 放弃当前时间片,主动进入Runnable状态
5、setPriority() 设置线程优先级,优先级越高,获取cpu的机会就越多,只能在线程启动前设置
6、线程的BLOCKED状态
- 进入BLOCKED状态,比如调用了sleep,或者wait方法
- 进行某个阻塞的io操作,比如因网络数据的读写进入BLOCKED状态
- 获取某个锁资源,从而加入到该锁的阻塞队列中而进入BLOCKED状态
7、如何优雅的设置睡眠时间
Thread.sleep(8575899L);
TimeUnit.HOURS.sleep(3);
TimeUnit.MINUTES.sleep(22);
TimeUnit.SECONDS.sleep(55);
TimeUnit.MILLISECONDS.sleep(899);
8、join是指把指定的线程加入到当前线程,比如join某个线程a,会让当前线程b进入等待,直到a的生命周期结束,此期间b线程是处于blocked状态。
9、ConcurrentHashMap
并发安全版HashMap,java7中采用分段锁技术来提高并发效率,默认分16段。Java8放弃了分段锁,采用CAS,同时当哈希冲突时,当链表的长度到8时,会转化成红黑树。(如需了解细节,见jdk中代码)
10、Java中Runnable和Callable有什么不同?
Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象
11、