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. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...
随机推荐
- [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境
1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...
- 比较DataTable中新旧数据
内容不写了,代码上都做了写注释. 1 /**//// <summary> 2 /// 比较两个数据表,并返回比较结果表 3 /// 比较条件: 4 ...
- struts2 内容记录
多xml文件配置 在开发过程中我们经常会将每一张表(如:user表)的struts.xml文件分开,便于管理,故需要建立struts_user.xml文件管理请求等.那么需要用到inculde标签. ...
- YII2 models非常好用的控制输出数据【重写Fields】
models里重写Fields真的很好用,用于分类.评论功能 列子:评论表models/Comment.php 1.关联商品表 2.获取父级(即管理员)评论 public function Field ...
- centos6.9(Linux系统)安装VMware tools教程
VMware tools是虚拟机上虚拟硬件的驱动,可以实现鼠标的无缝移出移入,剪贴板共享,共享文件夹等功能.很多的Linux系统初学者,在安装centos6.9系统时,没有安装VMware tools ...
- NodeJS寻常小毛病
在写关于NodeJS项目中常遇到的小错误 此时用到的服务器是phpstudy中的MySQL 1. First argument must be a string or Buffer 解决方法: ...
- jquery总结(来自于一个讲师的总结)
选择器 基本选择器:id class 标签 eq()查找具体的列表中的元素:$('ul li:eq(n)').eq(n) 层 :div p,div>p 查找:find 选中元素中再查找子元素,p ...
- C#winform程序安装在默认路径提示权限不足的问题
这个需要以管理员身份运行即可.在program.cs里面修改即可也可以在别的地方,如:C# 编程中可以使程序自动使用管理员身份运行,也就是我们常常看到一些程序的图标上会冒出个盾牌.方法:在源码的Pro ...
- 深入理解ES6之——JS类的相关知识
基本的类声明 类声明以class关键字开始,其后是类的名称:剩余部分的语法看起来像对象字面量中的方法简写,并且在方法之间不需要使用逗号. class Person { //等价于prototype的构 ...
- 2.1synchronized同步方法
由前言: 在第一章已经出现了非线程安全的情况."非线程安全"其实会发生在多个线程同时对同一个对象中的实例变量进行访问时发生.产生的结果就是脏读(读到被修改过的数据). " ...