首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java线程面试题 Top 50

这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...在现实中你解决的许多线程问题都属于生产者消费者模型,就是一个线程生产任务供其它线程进行消费,你必须知道怎么进行线程间通信来解决这个问题。...这个问题看起来和多线程没什么关系, 但不变性有助于简化已经很复杂的并发程序。Immutable对象可以在没有同步的情况下共享,降低了对该对象进行并发访问时的同步化开销。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。

1.1K20

Java线程面试题 Top 50

在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在...这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...我打算把这篇文章的问题弄成所有Java多线程问题的大合集,但是没有你的帮助恐怖是不能完成的,你也可以跟我分享其它任何问题,包括那些你被问到却还没有找到答案的问题。

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    多线程面试50题(转)

    这又是一个***钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...这个问题看起来和多线程没什么关系, 但不变性有助于简化已经很复杂的并发程序。Immutable对象可以在没有同步的情况下共享,降低了对该对象进行并发访问时的同步化开销。...47) 如果同步块内的线程抛出异常会发生什么?   这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...我打算把这篇文章的问题弄成所有Java多线程问题的大合集,但是没有你的帮助恐怖是不能完成的,你也可以跟我分享其它任何问题,包括那些你被问到却还没有找到答案的问题。

    31020

    50道Java线程题

    这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈 调用,一个线程中存储的变量对其它线程是不可见的。...这个问题看起来和多线程没什么关系, 但不变性有助于简化已经很复杂的并发程序。Immutable对象可以在没有同步的情况下共享,降低了对该对象进行并发访问时的同步化开销。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...这个问题就像是如何强制进行Java垃圾回收,目前还没有觉得方法,虽然你可以使用System.gc()来进行垃圾回收,但是不保证能成功。

    1.2K70

    50道Java线程题

    这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈 调用,一个线程中存储的变量对其它线程是不可见的。...这个问题看起来和多线程没什么关系, 但不变性有助于简化已经很复杂的并发程序。Immutable对象可以在没有同步的情况下共享,降低了对该对象进行并发访问时的同步化开销。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...这个问题就像是如何强制进行Java垃圾回收,目前还没有觉得方法,虽然你可以使用System.gc()来进行垃圾回收,但是不保证能成功。

    1.6K110

    java内存模型,多线程三大特性,volatile,Threalocal,线程池

    底层 6.线程池的介绍,作用以及创建方式 一、多线程三大特性 1.原子性 事物有原子性,这个概念大概都清楚,即一个操作或多个操作要么执行的过程中不被任何因素打断...所以当一个线程的数据修改后,还没有及时更新到全局变量中去,而另外一个线程就执行,所以造成数据冲突。也就是线程安全问题。所以要实现这个线程之间的可见性。...这里可以看到,全局变量 flag 已经变为 false,为什么那个线程还没结束?主线程也没有结束。 这就是线程之间不可见造成的。这也是Java内存模型。 主线程,跟子线程 ,两个都有自己的本地内存。...没有及时跟全局变量刷新主内存。而线程之间又不可见造成了线程不安全问题。那么如何去控制这个本地内存跟主内存的刷新呢?这就是java 内存模型,JMM 如何解决这种问题呢?...当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

    1K20

    吐血整理 | Java并发编程 72 卷

    希望通过这种连环炮的方式,让大家更好吸收知识点,同时也是面试中出现频率非常高。 上帝视角 废话不多说,直奔主题。 开始发炮 1、 什么是线程?...这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...46、 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...这个问题就像是如何强制进行Java垃圾回收,目前还没有觉得方法,虽然你可以使用System.gc()来进行垃圾回收,但是不保证能成功。

    57620

    72道 并发编程 面试题!

    你好,我是老田 今天分享的是Java并发编程必备的72连环炮,希望通过这种连环炮的方式,让大家更好吸收知识点,同时也是面试中出现频率非常高。 上帝视角 废话不多说,直奔主题。...这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...46、 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...这个问题就像是如何强制进行Java垃圾回收,目前还没有觉得方法,虽然你可以使用System.gc()来进行垃圾回收,但是不保证能成功。

    52621

    Java线程(二):线程同步synchronized和volatile

    要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。...本文讲述了JDK5.0之前传统线程的同步方式,更高级的同步方式可参见Java线程(八):锁对象Lock-同步问题更完美的处理方式。        ...,我们希望output方法被一个线程完整的执行完之后再切换到下一个线程,Java中使用synchronized保证一段代码在多线程执行时是互斥的,有两种用法:         1....volatile是第二种Java多线程同步的机制,根据JLS(Java LanguageSpecifications)的说法,一个变量可以被volatile修饰,在这种情况下内存模型(主内存和线程工作内存...没有明白JLS中为什么使用两个变量来阐述volatile的工作原理,这样不是很好理解。

    83500

    大数据岗位必知必会的53个Java基础

    因为Java不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。...所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。...List,Set,Map的区别 Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。...多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。 3)便于建模 这是另外一个没有这么明显的优点了。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。

    36610

    2 万多字,183 道 Java 面试题分析及答案

    如其他诸多的并发问题,避免伪共享的最基本方式是仔细审查代码,根据缓存行来调整你的数据结构。 有经验程序员的 Java 面试题 8)什么是 Busy spin?我们为什么要使用它?...这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,但是这个值后面被其他人改变了,但是你的客户端仍然在使用老的值,甚至你已经部署了一个新的jar。...这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。

    1.1K20

    并发情况下,单例模式之双重检验锁陷阱

    在我前面有写过一篇关于单例模式的几种创建的文章,最近在看多线程的时候,发现如果使用双重检验锁则可能会发生问题,接下来看我细细道来 单例模式的几种创建方式文章地址:https://www.jianshu.com...,为什么要加锁呢 当然在单线程情况下,是没有必要加锁,而多线程情况下,多个线程同时进行初始化对象操作,这样就会有线程安全性问题,为了防止这种情况,我们需要使用synchronized,这样该方式在多线程情况下就是线程安全的...第二次检查还未通过,才会真正初始化变量。 这个方法检查判定两次,并使用锁,所以形象称为双重检查锁定模式。 这个方案缩小锁的范围,减少锁的开销,看起来很完美。然而这个方案有一些问题却很容易被忽略。...不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。 这个重排序在没有改变单线程程序的执行结果的前提下,可以提高程序的执行性能。...双重检验锁问题解决方案 回头看下我们出问题的双重检查锁程序,它是满足as-if-serial语义的吗?是的,单线程下它没有任何问题,但是在多线程下,会因为重排序出现问题。

    86822

    JUC之可见性和有序性

    java内存模型 Java内存模型(Java Memory Model,简称JMM)定义了Java程序中各种变量、对象的访问方式和内存关系。...JMM规定了线程之间的可见性、原子性、顺序性等问题,确保多线程并发访问时的代码正确性。...JMM保证单个变量的读取和赋值操作具有原子性,如果希望在多个变量上实现原子操作,需要加锁或者使用原子类。 可见性 可见性是指一个线程修改的变量对其他线程是可见的。...在JMM中,并不保证一个线程修改变量后,另一个线程能够立即看到这个变化,这是因为每个线程都有自己的工作内存,线程之间不能直接读写彼此的工作内存。...,在理解和分析多线程程序时,需要遵守和应用这些规则,避免出现线程安全问题。

    15730

    JUC并发编程之JMM内存模型详解

    "initFlag" 变量为true了应该退出来才对,而为什么演示图中A线程内部的循环并没有退出来?...有序性: 在并发情况下,能够让线程按代码从上往下按顺序进行执行,可以使用synchronized或者volatile保证多线程之间操作的有序性(这种是在没有指令重排的情况下) JMM内存模型与硬件架构的关系...通过对前面的硬件内存架构、Java内存模型以及Java多线程的实现原理的了解,我们应该已经意识到,多线程的执行最终都会映射到硬件处理器上进行执行,但Java内存模型和硬件内存架构并不完全一致。...关键字,它能够被立马感知到,这是非常符合逻辑的,但是问题出现在于为什么我将关键字加在了count变量上,initFlag变量也能够被感知到呢?...所以这就是为什么我在count变量上加了关键字,其他线程能够及时的感知到initFlag的值发生了改变的原因。

    55830

    Java线程面试题合集(含答案)

    这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现。...为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。...在现实中你解决的许多线程问题都属于生产者消费者模型,就是一个线程生产任务供其它线程进行消费,你必须知道怎么进行线程间通信来解决这个问题。...47) 如果同步块内的线程抛出异常会发生什么? 这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。...这个问题就像是如何强制进行Java垃圾回收,目前还没有觉得方法,虽然你可以使用System.gc()来进行垃圾回收,但是不保证能成功。

    81440

    JMM 最最最核心的概念:Happens-before 原则

    得出这个结论的依据有两个:一是根据 Happens-before 原则,a 操作的结果对 b 可见,即 “i=1” 的结果可以被观察到;二是线程 C 还没运行,线程 A 操作结束之后没有其他线程会修改变量...3)volatile 变量规则(Volatile Variable Rule):对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作,这里的 “后面” 同样是指时间上的先后。...想要修复这个问题也很简单?既然不满足 Happens-before 原则,那我修改下让它满足不就行了。...只不过后者只能作用在单线程,而前者可以作用在正确同步的多线程环境下: as-if-serial 语义保证单线程内程序的执行结果不被改变,Happens-before 关系保证正确同步的多线程程序的执行结果不被改变...Happens-before 关系给编写正确同步的多线程程序的程序员创造了一个幻境:正确同步的多线程程序是按 Happens-before 指定的顺序来执行的。

    78940

    并发编程之多线程线程安全

    为什么有线程安全问题? 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。...线程安全解决办法: 问: 如何解决多线程之间线程安全问题 答: 使用多线程之间同步synchronized或使用锁(lock)。 问: 为什么使用线程同步或使用锁能解决线程安全问题呢?...这行代码在Java中是不具备原子性的,则多线程运行肯定会出问题,所以也需要我们使用同步和lock这些东西来确保这个特性了。...若两个线程在不同的cpu,那么线程1改变了i的值还没刷新到主存,线程2又使用了i,那么这个i值肯定还是之前的,线程1对变量的修改线程没看到这就是可见性问题。...程序执行时,线程A首先写标记变量flag,随后线程B读这个变量。由于条件判断为真,线程B将读取变量a。此时,变量a还根本没有被线程A写入,在这里多线程程序的语义被重排序破坏了!

    1K20

    “面试不败计划”:Java多线程和并发基础面试问答

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。...Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。...在Java的线程中并没有可供任何对象使用的锁和同步器。这就是为什么这些方法是Object类的一部分,这样Java的每一个类都有用于线程间通信的基本方法 14....Thread类的sleep()和yield()方法将在当前正在执行的线程上运行。所以在其他处于等待状态的线程上调用这些方法是没有意义的。这就是为什么这些方法是静态的。...java.util.concurrent.Future对象为我们解决了这个问题。

    26620

    猿思考系列3——一文学会思考的正确姿势

    关于为什么要使用单例模式,很多文章都是这些个观点:一是,解决多线程并发访问的问题。二是节约系统内存,提交系统运行的效率,提高系统性能。然后再扯上static作用域讲个半天。...最后得到了千篇一律的解释,然鹅儿这似乎并没有啥卵用,而且很晦涩。 ? ? 我们回到根本上来,从原理去分析这个问题。一个类由什么组成呢?属性和方法对吧。属性是什么?是变量,是引用,是数据的载体。方法呢?...我们从java的内存模型上看,属性承载的数据,在堆内存,方法是在栈内存,而且你要是看了之前讲代码执行套路的文章,那么方法在执行的时候是多线程的方式来执行的。...我们在使用方法的时候,很多时候用的是局部变量,没有用类变量,这本身就是为安全性的考虑。 回到为什么用单例模式这个问题上来,答案就很简单了。因为,在这个场景下,我只用使用类的算法。...算法支持多线程,已经达到性能要求了。那为什么还有一些配置属性?其实,是当常量来用了,因为,根本就不会改变的情况下,才使用单例。

    27630

    猿思考系列3——一文搞懂单例和思考的套路

    关于为什么要使用单例模式,很多文章都是这些个观点:一是,解决多线程并发访问的问题。二是节约系统内存,提交系统运行的效率,提高系统性能。然后再扯上static作用域讲个半天。...最后得到了千篇一律的解释,然鹅儿这似乎并没有啥卵用,而且很晦涩。 ? ? 我们回到根本上来,从原理去分析这个问题。一个类由什么组成呢?属性和方法对吧。属性是什么?是变量,是引用,是数据的载体。方法呢?...我们从java的内存模型上看,属性承载的数据,在堆内存,方法是在栈内存,而且你要是看了之前讲代码执行套路的文章,那么方法在执行的时候是多线程的方式来执行的。...我们在使用方法的时候,很多时候用的是局部变量,没有用类变量,这本身就是为安全性的考虑。 回到为什么用单例模式这个问题上来,答案就很简单了。因为,在这个场景下,我只用使用类的算法。...算法支持多线程,已经达到性能要求了。那为什么还有一些配置属性?其实,是当常量来用了,因为,根本就不会改变的情况下,才使用单例。

    25420
    领券