Java高级开发工程师面试——多线程
来自:Sanesee
链接:http://www.sanesee.com/article/java-engineer-interview-of-thread
1.进程和线程的区别?
进程是一个具有独立功能的程序关于某个数据集合的执行活动,不同的进程拥有独立的内存空间;线程是程序执行的最小单位,一个或多个线程组成一个进程,同一个进程中的所有线程共享相同的内存空间,运行时都有一个线程栈来保存变量值信息。
2.Thread类中的start()和run()有什么区别?
start()是用来启动新创建的线程,在start()内部调用了run(),当前线程仅能通过start()启动一次线程;若在本线程中直接调用run(),则它为一个普通的方法调用而已,没有创建新的线程,可以调用多次。
3.Runnable和Callable有什么区别?
Runnable和Callable的核心功能没什么区别,只是Callable可以返回值和抛出异常。
4.volatile有什么作用?
使用volatile修饰的变量,线程每次在使用变量的时候,都会读取变量修改后的最新值。具体工作方式:从堆内存加载变量值到线程本地内存,建立一个变量副本,线程对变量的修改在线程内存完成,然后再将值写回堆内存。若两个线程对堆中的同一个变量进行操作,也会出现并发问题。
5.什么是竞态条件?
当多个线程同时执行一段代码(或使用相同资源),因为顺序原因导致执行结果不符合预期,就出现了竞态条件。
6.如何处理线程运行时发生的异常?
我们知道,Thread的run()是不抛出任何检查型异常(Checked Exception)的,而它自身有可能因异常而终止执行,即使用try…catch也没法捕获。Java5.0提供了一个Thread.setUncaughtExceptionHandler来设置对线程中未捕获异常的处理。
7.请简述ThreadLocal的作用。
当使用ThreadLocal修饰变量时,ThreadLocal为每个使用该变量的线程提供了独立的变量副本,每个线程可以独立地操作自己的副本,而不会影响到其它线程的副本。
8.为什么wait()和notify()需要在同步块中调用?
首先,JDK强制要求这样做,否则会抛出IllegalMonitorStateException;还有就是,这样可以避免wait和notify之间产生竞态条件。
9.请简述join()和yield()的作用。
t.join()表示阻塞主线程,等待t线程直到t线程运行结束;t.yield()表示阻塞t线程,将CPU资源让给其它相同优先级的资源。
10. 请简述wait()和sleep()方法有什么不同?
sleep()是由Thread提供的,它会释放CPU资源一段时间,但不会释放锁,等待的时间到了会恢复运行;wait()是由Object提供的,它会放弃对象锁,进入等待锁定池,直到针对此对象的notify()才能获取锁进入运行状态。
Java高级开发工程师面试——多线程的更多相关文章
- Java高级开发工程师面试笔记
最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...
- Java高级开发工程师面试考纲 转
转 http://www.sanesee.com/article/java-engineer-interview-of-content-tree 1 Java基础 1.1 Collection和Map ...
- Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java高级软件工程师面试考纲
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- 问题集录--Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- [面试] Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- 近期Java高级开发岗面试总结
原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...
- Java高级开发工程师
- Java高级开发必会的50个性能优化的细节(珍藏版)
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...
随机推荐
- MYSQL触发器在PHP项目中用来做信息备份、恢复和清空
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...
- 应用在安卓和ios端APP的证件识别
移动端证件识别智能图文处理,是利用OCR识别技术,通过手机拍摄身份证图像或者从手机相册中加载证件图像,过滤身份证的背景底纹干扰,自动分析证件各文字进行字符切分.识别,最后将识别结果按姓名.地址.民族. ...
- unlink()
unlink() 函数删除文件. 若成功,则返回 true,失败则返回 false. 语法 unlink(filename,context) 参数 描述 filename 必需.规定要删除的文件. c ...
- org.springframework.web.filter.DelegatingFilterProxy的作用
一.类结构 DelegatingFilterProxy类继承GenericFilterBean,间接实现了Filter,故而该类属于一个过滤器.那么就会有实现Filter中init.doFilter. ...
- Spring集成Quartz完成定时任务
在JavaEE系统中,我们经常会用到定时任务,比如每天晚上凌晨之后跑批处理或者是每天某个时刻群发消息等等. 我们可以使用java.util.Timer结合java.util.TimerTask来去完成 ...
- Python爬虫知识点四--scrapy框架
一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...
- jquery.uploadify+spring mvc实现上传图片
一.前端页面 1.下载jquery.uploadify 去uploadify官网(http://www.uploadify.com/download/)下载压缩包,解压后放在如下路径: 2.html结 ...
- 08-图8 How Long Does It Take
原题: Given the relations of all the activities of a project, you are supposed to find the earliest co ...
- redis—操作基础
内存数据库: 1.双击redis-server.exe =>启动2.双击redis-cli.exe =>打开管理控制台3.查看所有key keys *4.查看key类型 type myKe ...
- PHP秒杀系统-高并发高性能的极致挑战
慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...