JAVA基础问题一:java关键字volatile的作用是什么
能保证原子性吗
答:用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值
不能保证原子性
问题二:四种线程池,如何配置线程池的线程数答:newFixedThreadPool创建一个指定工作线程数量的线程池(常用)newCachedThreadPool创建一个可缓存的线程池newSingleThreadExecutor只创建一个线程来执行任务newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer
最佳线程数目=(线程等待时间+线程CPU时间)/线程CPU时间)*CPU数目上述公式作为参考,具体需要根据压力测试进行调试
问题三:ConcurrentHashMap的可以并发读,并发读写,并发写吗
用到的锁机制是什么
该锁的优点和缺点分别是什么
答:ConcurrentHashMap中任意数量的读取线程可以并发的访问Map,执行读取操作的线程和执行写入操作的线程可以并发的访问Map,并且一定数量的写入线程可以并发的修改Map
使用的锁机制称为分段锁
对一组独立对象的锁进行分解,这种情况叫做锁分段
优势:例如,ConcurrentHashMap的视线中使用了一个包含16个锁的数组,每个锁保护所有散列桶的1/16,假设散列函数具有合理的分布性,那么这大约能把锁的请求减少到原来的1/16
正是这项技术使得ConcurrentHashMap能够支持多达16个并发的写入
分段锁劣势:与采用单个锁来实现独占访问相比,要获取多个锁来实现独占访问将更加困难并且开销更高
问题四:如果JAVA程序中抛出了java
OutOfMemoryError:Javaheapspace,请讲一下解决问题的思路
答:要解决这个区域的问题,一般的手段