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面试题——多线程
Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...
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道面试常问的...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
作者:臧圩人 JAVA面试题解惑系列博客文章精选 1. JAVA面试题解惑系列 1.1 JAVA面试题解惑系列(一)...1.10 JAVA面试题解惑系列(十)——话说多线程 1.11 JAVA面试题解惑系列(十一)——这些运算符你是否还记得?
多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 Spring面试题 Spring Boot面试题 Spring Cloud面试题 RabbitMQ面试题 Dubbo 面试题 MyBatis 面试题 ZooKeeper 面试题 数据...
Java面试笔记.docx JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记....
│ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...
│ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...
当然,面试中常见的经典Java面试题,如多线程编程、Java内存模型、设计模式等,也是这份资料中不可或缺的部分。阿里巴巴等一线互联网公司的高频Java面试题,如JVM调优、高并发编程等,更是准备面试时的重中之重。 ...
│ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...
│ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...
│ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...
│ 多线程编程之二——MFC中的多线开发.txt │ 多线程编程之四——线程的同步.txt │ 排序.txt │ 最常问问题和最佳答案.txt │ 求职信 .txt │ 深入分析Windows和Linux动态库应用异同 .txt │ 用VC++5.0 定 制 和 ...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java基础题+java集合+异常&反射+IO&NIO+JVM+linux+mysql+spring+mybatis——nginx+redis+dubbo
Java面试题大全Java 基础多线程 Java 基础 面向对象都有哪些特性以及你对这些特性的理解 面向对象有3大特性,即封装、继承、多态 封装:封装将复杂的功能封装起来,对外开放一个接口,简单调用即可。 继承:继承是从...
并发-多线程相关 jvm JVM——虚拟机相关 来源-源码相关 Redis——Redis相关 卡夫卡-卡夫卡相关 Elasticsearch——ES相关 HBase——HBase相关 SpringBoot——Spring Boot相关 1多线程 1.1如何设置线程池线程数? 任务...
1) 现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行? 2) 在 Java 中 Lock 接口比 synchronized 块的优势是...15) 你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?