来自: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高级开发工程师面试——多线程的更多相关文章

  1. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  2. Java高级开发工程师面试考纲 转

    转 http://www.sanesee.com/article/java-engineer-interview-of-content-tree 1 Java基础 1.1 Collection和Map ...

  3. Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  4. Java高级软件工程师面试考纲

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  5. 问题集录--Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  6. [面试] Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  7. 近期Java高级开发岗面试总结

    原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...

  8. Java高级开发工程师

  9. Java高级开发必会的50个性能优化的细节(珍藏版)

      在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...

随机推荐

  1. javascript 二维(多维)数组的复制问题

    最近在项目中遇到一个动画暂停的效果,需要在动画停止的时候检测当前坐标和已经运行的时间,从而调节时间轴为再次运行时加速. 但是在数组保存方面折腾了半天. var orbitArray = [], lin ...

  2. 一、VueJs 填坑日记之基础概念知识解释

    概述在最开始听说vuejs这个词是在2016年,当时天真的认为自己是个后端开发工程师不需要学习太多的前端知识,不过紧接着在2017年在公司就用到了vuejs.对于初学者(尤其是干后端的初学者)来说,刚 ...

  3. Do you kown Asp.Net Core -- 配置Kestrel端口

    Kestrel介绍 在Asp.Net Core中,我们的web application 其实是运行在Kestrel服务上,它是一个基于libuv开源的跨平台可运行 Asp.Net Core 的web服 ...

  4. StackExchange.Redis的使用 Redis五种数据类型的应用

    ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...

  5. C#写的较完美验证码通用类

    using System; using System.Collections; using System.ComponentModel; using System.Data; using System ...

  6. MySql的虚拟机和Xshell5的连接过程

    给大家介绍一下虚拟机和Xshell5连接的基本配置1.安装虚拟机,跟着提示一步一步安装即可,注意添加镜像文件,虚拟机就完成了.2.下载一个Xshell5,安装好之后.要修改虚拟机的网卡状态    1) ...

  7. springboot-mybatis 批量insert

    springboot mybatis 批量insert 操作 直接上代码: 1.首先要在pom.xml中导入包: 略...... 2.springboot mybatis配置: package com ...

  8. 《java.util.concurrent 包源码阅读》18 Exchanger

    Exchanger可以看做双向数据传输的SynchronousQueue,即没有生产者和消费者之分,任意两个线程都可以交换数据. 在JDK5中Exchanger被设计成一个容量为1的容器,存放一个等待 ...

  9. SSM框架开发web项目系列(一) 环境搭建篇

    前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...

  10. JAVA基础3——常见关键字解读(2)

    synchronized Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 用法说明 synchronized 关键字,它包括两种用法: ...