能不能谈谈你对线程安全的理解?
能不能谈谈你对线程安全的理解? 典型回答 线程安全是指某个函数在并发环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。 简单来说,就是多个线程同时访问共享变量的时候,得到的结果和我们预期的一样,就是线程安全。所以有四个关键词:并发、多线程、共享变量、正确完成。这里所谓的正确完成,其实就是要满足所谓的原子性、有序性和可见性。 知识扩展 并发与并行 什么是并发...
能不能谈谈你对线程安全的理解? 典型回答 线程安全是指某个函数在并发环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。 简单来说,就是多个线程同时访问共享变量的时候,得到的结果和我们预期的一样,就是线程安全。所以有四个关键词:并发、多线程、共享变量、正确完成。这里所谓的正确完成,其实就是要满足所谓的原子性、有序性和可见性。 知识扩展 并发与并行 什么是并发...
线程池的拒绝策略有哪些? 典型回答 在Java中,线程池的拒绝策略决定了在任务队列已满的情况下,如何处理新提交的任务。当线程池达到最大容量,并且任务队列也已满时,拒绝策略就会起作用。Java提供了四种内置的拒绝策略,它们分别是: AbortPolicy - 这是默认的拒绝策略,当线程池无法接受新任务时,会抛出RejectedExecutionException异常。这意味着新任务...
线程有几种状态,状态之间的流转是怎样的? 典型回答 Java中线程的状态分为6种: 1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2.运行(RUNNABLE):Java线程中将就绪(READY)和运行中(RUNNING)两种状态笼统的称为“运行”。 就绪(READY):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态...
线程是如何被调度的? 典型回答 对于单CPU的计算机来说,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。 所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。 前面关于线程状态的介绍中,我们知道,线程的运行状态中包含两种子状态,即就绪(READY)和运行中(RUNNING)。 而一个线程想要从就绪状态变成运行中...
线程数设定成多少更合适? 典型回答 线程数设定是个高频出现的题目,这个题目对于优秀的面试官希望得到的答案是面试者的思考过程,考察其分析线程数设定的思考方向是否全面(主要包括对操作系统线程的理解和实际设置经验)。比较差的面试官才会认为固定的公式是正确的。 首先看一下影响线程数的因素可能有哪些? 影响线程数的因素 线程数的设定需要根据应用程序的需求和运行环境来决定,没有一个固定的...
线程同步的方式有哪些? 典型回答 线程同步指的就是让多个线程之间按照顺序访问同一个共享资源,避免因为并发冲突导致的问题,主要有以下几种方式: synchronized:Java中最基本的线程同步机制,可以修饰代码块或方法,保证同一时间只有一个线程访问该代码块或方法,其他线程需要等待锁的释放。 public synchronized void synchronizedMethod() ...
✅父子线程之间怎么共享/传递数据? 典型回答 当我们在同一个线程中,想要共享变量的话,是可以直接使用ThreadLocal的,但是如果在父子线程之间,共享变量,ThreadLocal就不行了。 如以下代码,会抛出NPE: public static ThreadLocal<Integer> sharedData = new ThreadLocal<>(); ...
有哪些实现线程安全的方案? 典型回答 在编程中,如果遇到并发安全的情况,有哪些方案可以来实现线程安全呢?以下是几个常见的方案(本文没有局限某种编程语言,而是说的整体思想): 1、单线程 想要实现线程安全,最简单的方式就是干脆不支持多线程,只用单线程来执行,那么就可以从根本上杜绝线程安全的问题了。比如Redis,就是这种思想,在命令执行时,只依赖单线程进行。 Redis为什么被设计...
有了synchronized为什么还需要volatile? 典型回答 synchronized其实是一种加锁机制,那么既然是锁,天然就具备以下几个缺点: 1、有性能损耗:虽然在JDK 1.6中对synchronized做了很多优化,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。但是他毕竟还是一种锁。所以,无论是使用同步方法还是同步代码块,在同步操作之前还是要进行加锁,同步操作之后需要...
有了MESI为啥还需要JMM? 典型回答 MESI协议和Java内存模型(JMM)虽然都旨在解决多线程环境中的数据一致性问题,但它们工作在不同的层面上,并且解决的问题范围和目的不同。 MESI协议是硬件层面的缓存一致性协议,用于确保在多核处理器系统中,不同处理器缓存中的缓存内容保持数据一致性。它主要关注的是处理器缓存之间的一致性问题,通过四种状态(Modified, Exclusive...