`

java面试整理五——多线程

    博客分类:
  • java
阅读更多
1. 进程与线程的区别
进程:执行中的程序,一个进程中至少包含一个线程
线程:进程中负责程序执行的执行单元
2. 进程间相互通信的常见方式
管道、信号、消息队列、套接字、共享内存
3. 线程间相互通信的常见方式
共享变量、synchronized、lock
4. 线程的实现
a) 继承Thread类,(必须重写run()方法)
i. 创建线程后,需要使用start()启动线程,然后再执行run()方法
ii. 如果调用run()方法,相当于在主线程执行run()方法,并未创建新线程
b) 实现runnable接口(必须重写run()方法)
c) Executor
i. Executors,用于创先线程池,返回的线程池都实现ExecutorService接口
ii. Callable、Future,ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future,如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。
5. 线程的状态图



a) 创建(new):准备好一个多线程对象
b) 就绪(runnable):调用start()方法,等待cpu调度
c) 运行(running):执行run()方法
d) 阻塞(blocked):暂时停止执行,可能将资源交给其他线程使用
e) 消亡(dead):由于突然中断或者子任务执行完毕,线程就会销毁
6. Wait()、sleep()、yield()
a) Wait是Object类定义的方法,sleep、yield是Thread类定义的方法
b) Sleep不会导致线程锁行为的改变(不会释放锁)
c) Wait会释放当前线程持有的锁,进入阻塞状态;调用wait后,需要其他线程执行notify、notifyAll来唤起当前被阻塞的线程
d) Yield和sleep类似,只是不能由用户指定暂停多长时间
e) Sleep可以使任意优先级的其他线程获得执行机会,yield只能让同优先级的线程获得执行机会
7. 线程的优先级
Java中线程优先级分为1-10个等级,JDK中使用三个常量来预设线程优先级
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
继承性、规则性(高优先级线程总是先执行)、随机性(高优先级线程不一定先执行完)
8. 守护线程(Daemon Thread)
作用是为其他线程提供服务。thread.setDaemon(true)必须在thread.start()之前设置,否则会抛出异常;
9. 同步synchronized与锁lock的区别
synchronized lock
获取 假设A线程获得锁,B线程等待。如果A线程阻塞,B线程则一直等待 分情况而定,Lock有多种获取锁的方式。大致就是线程不用一直等待,可以尝试获得锁
释放 1、 线程执行完同步代码,释放锁
2、 执行过程中出现异常,jvm会让线程释放锁 在finally块中必须释放锁,要不然容易造成线程死锁
状态 无法判断 可以判断
锁类型 可重入、不可中断、非公平 可重入、可中断、可公平(二者皆可)
性能 少量同步 大量同步
10. 锁类型
a) 可重入锁:在执行对象中所有同步方法不用再次获得锁
b) 可中断锁:在等待获取锁过程中可中断
c) 公平锁: 按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利
d) 读写锁:对资源读取和写入的时候拆分为2部分处理,读的时候可以多线程一起读,写的时候必须同步地写
11. Java里面的Threadlocal是怎样实现的?
ThreadLocal,很多地方叫做线程本地变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量,线程之间互不影响,这样一来就不存在线程安全问题,也不会严重影响程序执行性能。ThreadLocal确实只有一个变量,但是它内部包含一个map,针对每个thread保留一个entry,如果对应的thread不存在则会调用initialValue。
12. 什么是上下文切换?
在多任务处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里。上下文切换就是这样一个过程。
在中断处理中,其他程序”打断”了当前正在运行的程序。当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换。
在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换。
13. 如何确保main()方法所在的线程是Java程序最后结束的线程?
我们可以使用Thread类的join()方法来确保所有程序创建的线程在main()方法退出前结束。Join()的作用就是让主线程等待子线程结束之后才继续运行。
14. 阻塞队列(BlockingQueue)的实现原理
阻塞队列实现阻塞同步的方式就是lock锁的多条件(condition)阻塞控制。
  • 大小: 151.8 KB
分享到:
评论

相关推荐

    JAVA面试题——多线程.docx

    ### JAVA面试题——多线程知识点详解 #### 一、线程与进程的基本概念 线程和进程是并发编程中的两个基本概念。进程是操作系统进行资源分配和调度的基本单位,而线程则是进程中的实际运行单元。每一个进程都有其...

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    73道Java面试题合集-多线程与进程

    以下是对73道Java面试题合集——多线程与进程相关知识点的详细解释。 1. **进程与线程的概念**: - **进程**:是操作系统资源分配的基本单位,拥有独立的内存空间和系统资源,可以并发执行。 - **线程**:是程序...

    Java面试之——线程编程方面

    Java线程编程是Java开发中的重要组成部分,尤其在面试中,这部分知识的掌握程度往往成为衡量开发者...这些知识点涵盖了Java面试中线程编程部分的基础和进阶问题,理解并熟练掌握这些内容对于面试和实际开发都至关重要。

    多线程面试题

    在Java编程领域,多线程是面试中常见且重要的知识点,尤其对于系统设计和高并发处理的岗位至关重要。本文将围绕“多线程面试题”这一主题,深入探讨相关概念、技术及其应用。 1. **线程的概念**:线程是程序执行的...

    Java全能学习面试手册——Java架构师进阶资料面试资料.zip

    03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个Java经典的Main方法面试题!.pdf 06 10个Java经典的String面试题!.pdf 07 15道经典的Tomcat面试题!.pdf 08 15道面试常问的...

    115个Java面试题和答案——终极列表

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,从基础概念到高级特性和设计模式。这份终极列表包含115个Java面试题和答案,旨在帮助求职者全面准备,以期在面试中表现出色。以下是部分核心...

    java程序员必备——比较全的Java面试题

    【Java程序员必备——比较全的Java面试题】 Java编程语言作为全球最受欢迎的开发语言之一,其面试题库广泛且深入,涵盖了基础语法、面向对象、集合框架、多线程、网络编程、I/O流、数据库操作、设计模式等多个方面...

    Java面试之——线程编程方面[借鉴].pdf

    Java线程编程是Java开发中的重要组成部分,尤其在面试中,这部分知识经常被用来测试候选人的并发编程能力。以下是对给定文件中提到的一些关键知识点的详细解释: 1. **线程实现方式**:Java中创建线程有两种方式,...

    面试题解惑系列(十)——话说多线程

    【标题】:“面试题解惑系列(十)——话说多线程” 【描述】:本篇文章主要探讨的是Java中的多线程概念及其在面试中常见的问题解析。 【标签】:“面试题解惑系列(十)——话说多线程” 【部分内容】:在Java中,多...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    Java面试题——重整理版

    Java面试题涵盖了许多Java语言的核心概念,包括J2SE(Java 2 Standard Edition)的基础知识,JSP(Java Server Pages)、Servlet、JDBC(Java Database Connectivity)、JDO(Java Data Objects)、XML、EJB...

    Java程序员面试宝典——2012版

    《Java程序员面试宝典——2012版》是一份针对Java程序员面试的全面指南,旨在帮助准备面试的程序员深入理解和掌握Java的核心概念和技术。以下是对该文档标题、描述及部分内容涉及的重要知识点的详细解析: ### Java...

    2021Java大厂面试题——大厂真题之拼多多-Java高级.pdf

    - 在单核CPU环境中,即使无法充分发挥多线程的优势,多线程也可以帮助解决阻塞问题。例如,在进行网络请求时,可以使用额外的线程来处理,这样即使主线程阻塞,其他线程仍然可以继续执行,提高程序的整体响应性。 ...

    Java面试之——代码与编程题

    【Java面试之——代码与编程题】是Java程序员在求职过程中常常遇到的面试环节,主要考察应聘者对Java语言的理解和实际操作能力。面试中,面试官可能会提出各种类型的编程题目,包括但不限于设计模式、继承机制、内部...

    java面试——深圳-银盛支付-Java中级.zip

    这份"java面试——深圳-银盛支付-Java中级.zip"压缩包文件很可能包含了针对Java中级开发者的一系列面试问题和解答,旨在帮助求职者提升自己的技能,并在面试中脱颖而出。下面,我们将深入探讨一些可能涵盖的Java中级...

    java面试——南京-软通动力-Java中级.zip

    这份资料“java面试——南京-软通动力-Java中级.zip”包含了一份详细的PDF文档,旨在帮助求职者准备相关的面试问题。以下是基于Java中级面试可能会涉及的一些核心知识点的详细阐述: 1. **Java基础** - **数据类型...

    Java面试题和答案——终极(上、下)_尚硅谷_宋红康.zip

    本资料"Java面试题和答案——终极(上、下)_尚硅谷_宋红康.zip"包含了全面的Java面试问题和解答,旨在帮助求职者准备Java程序员或高级工程师的面试。 这份压缩包由两个PDF文件组成:115个Java面试题和答案——终极...

Global site tag (gtag.js) - Google Analytics