ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java面试之多线程&并发篇(3) [打印本页]

作者: 饭宝    时间: 2024-11-14 22:39
标题: Java面试之多线程&并发篇(3)
前言

原来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!SynchronizedMap和ConcurrentHashMap有什么区别?什么是线程安全?Thread类中的yield方法有什么作用?Java线程池中submit() 和 execute()方法有什么区别?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘
*** 12万字的java面试题整理 ***
*** java核心面试知识整理 ***
SynchronizedMap和ConcurrentHashMap有什么区别?

SynchronizedMap()和Hashtable一样,实现上在调用map所有方法时,都对整个map举行同步。以是,只要有一个线程访问map,其他线程就无法进入map。
而ConcurrentHashMap的实现却更加精细,它对map中的所有桶加了锁。而假如一个线程在访问ConcurrentHashMap某个桶时,其他线程,仍旧可以对map执行某些操纵。
以是,ConcurrentHashMap在性能以及安全性方面,明显比Collections.synchronizedMap()更加有优势。同时,同步操纵正确控制到桶,如许,即使在遍历map时,假如其他线程试图对map举行数据修改,也不会抛出ConcurrentModificationException。
什么是线程安全

线程安全就是说多线程访问同一段代码,不会产生不确定的结果。
又是一个理论的问题,各式各样的答案有很多,我给出一个个人认为表明地最好的:
假如你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。这个问题有值得一提的地方,就是线程安全也是有几个级别的:
Thread类中的yield方法有什么作用?

Yield方法可以暂停当前正在执行的线程对象,让其它有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证使其它线程一定能占用CPU,执行yield()的线程有大概在进入到暂停状态后马上又被执行。
Java线程池中submit() 和 execute()方法有什么区别?

两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它界说在Executor接口中,而submit()方法可以返回持有盘算结果的Future对象,它界说在ExecutorService接口中,它扩展了Executor接口,其它线程池类像ThreadPoolExecutor和ScheduledThreadPoolExecutor都有这些方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4