Java基础面试-多线程

对线程安全的理解

不是线程安全,应该是内存安全,堆是共享内存,可以被所有线程访问

和单线程执行的结果一样,就是线程安全的

栈:每个线程相互独立,保证代码执行顺序

堆:每个进程会被分配独立的内存空间,里面有一块堆内存,进程内的所有线程都可以访问到这块堆内存,这就是造成线程安全问题的潜在原因

守护线程

守护线程:为所有非守护线程提供服务的线程,任何一个守护线程都是整个IVM中所有非守护线程的保姆;

守护线程类似于整个进程的一个默默无闻的小喽喽;它的生死无关重要,它却依赖整个进程而运行;哪天其他线程结束了,没有要执行的了,程序就结束了,理都没理守护线程,就把它中断了;

注意:由于守护线程的终止是自身无法控制的,因此千万不要把io、File等重要操作逻辑分配给它;因为它不靠谱;

守护线程的作用是什么?

举例,GC垃圾回收线程:就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

应用场景:

(1)来为其它线程提供服务支持的情况,

(2) 或者在任何情况下,程序结束时,这个线程必须正常且立刻关闭,就可以作为守护线程来使用,反之,如果一个正在执行某个操作的线程必须要正确地关闭掉否则就会出现不好的后果的话,那么这个线程就不能是守护线程,而是用户线程。通常都是些关键的事务,比方说,数据库录入或者更新,这些操作都是不能中断的。

thread.setDaemon(true)必须在thread.start0之前设置,否则会跑出一个llegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。

在Daemon线程中产生的新线程也是Daemon的。

相关推荐
欧恩意4 小时前
【Tools】Java反汇编工具推荐
java·汇编
geovindu4 小时前
python: Memento Pattern
开发语言·python·设计模式·备忘录模式
学无止境_永不停歇4 小时前
十、C++多态
开发语言·c++
寻星探路5 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙5 小时前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
Aric_Jones5 小时前
JavaScript 从入门到精通:完整语法指南
开发语言·javascript·ecmascript
星河耀银海5 小时前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交5 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
岱宗夫up5 小时前
FastAPI入门(上篇):快速构建高性能Python Web API
开发语言·前端·python·fastapi
Dxy12393102165 小时前
中文乱码恢复方案
开发语言·python