线程面试题11
Posted SmallCuteMonkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程面试题11相关的知识,希望对你有一定的参考价值。
1.线程创建的四种方式?
ExecuteService es=Executor.newCachedThreadPool();然后可以通过实现Runnable接口和实现它的run方法进行创建多个线程
java中基于Executor创建线程池的四种方式:
- newCachedThreadPool(缓存线程池,可以根据线程大小自动进行相关的回收)
- newSingleThreadPool(单线程池)
- newScheduledThreadPool(定时的线程池)
- newFixedThreadPool(定长的线程池)
2. 共享锁和独占锁?
- 独占锁:每次只能有一个线程持有锁,它可以避免读读冲突,某个只读线程线程获取锁,其他的只读线程只可以等待。
- 共享锁:允许多个线程同时获取锁,并发访问资源。如ReadWriteLock.共享锁则是一种乐观锁,可以多个执行读操作访问共享资源。
3.重量级锁和轻量级锁,分段锁?
重量级锁:依赖于操作系统的MutexLock 所实现的锁我们称之为重量级锁。(synchronized----依赖于对象内部monitor来实现--------》依赖于底层的MutexLock实现,它们状态之间的转换需要的比较长的时间,所以synchronized的效率是非常低的).
分段锁:分段锁而非一种实际的锁,而是一种思想, CocurrentMap是学习分段锁的最好的实践。
4.CocurrentHashMap为什么 在线程的时候比Hashtable的效率更高?
CocurrentHashMap使用的是segment(分段锁),相当于多个HashMap,然后每个部分进行加锁。
HashTable:是多个线程使用一把锁,然后多个线程访问的时候只有一个可以访问,会导致阻塞问题。
5.TreeMap的理解?
实现了SortedMap,可以根据它的key进行升序排序
,key必须实现Comparable接口或者传入自定义的Comparator,
否则会抛出java.lang.ClassCastExcption异常。
6.异常处理?
Throwable是所有的异常处理的超类,包含Error和Exception.
Error:java运行时系统内部错误和内部资源耗尽。不会抛出这个异常
Exception:以包含RuntimeException和CheckException异常。抛出的一般是RuntimeException,这个一定是程序员的错误。
CheckExeception:外部错误,一般可以通过try/catch进行相应的捕获。
7.Throw和Throws的区别?
Throws是用在一个方法上的异常抛出,这个异常不一定发生,Throw这个是用在方法内部的,如果执行了这个语句,那么异常一定会发生,执行了这个语句后面就已经结束了。
8.索引的数据类型?
FullText,BTREE,RTREE,HASH.
-
FullText:,目前只有MyISAM引擎支持,全文索引,只有char,Text,varchar列支持全文索引。
-
BTREE:mysql默认和最常用 的索引,将索引按照一定的算法存入一个树形(二叉树)结构中,每次从root开始遍历node,然后获取leafNode.
-
RTREE:不常用。
-
HASH: 由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。
以上是关于线程面试题11的主要内容,如果未能解决你的问题,请参考以下文章
经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!
(Google面试题)有四个线程1234同步写入数据……C++11实现