Java面试篇【并发编程】常见面试题(2024最新)

Java并发编程常见面试题

1.什么是线程和进程?

进程是操作系统分配资源的最小单位,各个进程之间占据独立的寻址空间,运行也是独立运行,进程间通信需要一些机制。进程间切换需要的开销较大。
线程是程序执行的基本单位,一个进程可以开启多个线程,他们的很多空间,比如堆空间,其他资源都是公用的。对于java来说,线程有自己的虚拟机栈,本地方法栈,和程序计数器。线程执行开销小,但是不够安全。

2. 虚拟机栈和本地方法栈,程序计数器为什么是私有的?

- 虚拟机栈:每个java方法在执行的时候,都会创建栈帧,来记录局部变量,操作数栈,引用等等。为了保证线程的局部变量不被别的线程访问,应该设为私有。
- 本地方法栈道理类似。程序计数器是记录方法执行到了哪里,用来在线程切换的时候恢复到正确的位置,自然要一个线程一个。

3.线程的生命周期与状态

在这里插入图片描述
在这里插入图片描述
线程创建之后处于New阶段,调用start()方法之后,处于ready阶段,获得cpu时间片时处于running阶段。
但是操作系统笼统认为处于runnable阶段。
执行wait()、join()之后,进入WAITING阶段,等待别的线程的通知,才能正常运行,此时释放资源。
执行sleep(long millis),wait(long millis)之后,进入TIME_WAITING阶段。时间过了就回到Runnable阶段。
在调用同步方法,却没有获得锁的时候,进入block阶段,执行完run方法,进入TERMINATED阶段。

4. 什么是线程死锁

持有对方想要的资源,期待获得对方持有的资源,形成了一个圈。互相等待谁也不让。
在这里插入图片描述

public class DeadLockDemo{
    private static Object obj1 = new Object();
    private static Object obj2 = new Object();
    public static void main(String[] args){
        new Thread(()->{
            synchronized(obj1){
                System.out.println(Thread.currentThread()+"get obj1");
                try{
                    Thread.sleep(1000);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread()+"waiting obj2");
                synchronized(obj2){
                    System.out.println(Thread.currentThread()+"get obj2");
                }
            }
        },"thread-1").start();
        new Thread(()->{
            synchronized(obj2){
                System.out.println(Thread.currentThread()+"get obj2");
                try{
                    Thread.sleep(1000);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread()+"waiting obj1");
                synchronized(obj1){
                    System.out.println(Thread.currentThread()+"get obj1");
                }
            }
        },"thread-2").start();
    }
}

5.如何避免线程死锁?

死锁产生的四个条件:
1.互斥。该资源任意时刻只能由一个线程占用。
2.请求与保持:一个进程因为因请求资源而阻塞时,自己占有的资源不会释放。
3.不剥夺条件:线程自己获得的只能自己使用完毕自己释放,不能被强行剥夺。
4.循环等待:互相持有和等待资源需要形成一个头尾相接的闭环。

避免死锁:
1.破坏请求与保持条件:占用部分资源的线程进一步申请其他资源的时候,如果申请不到,可以主动释放资源。
2.破坏不剥夺条件:一次性请求所有资源。
3.破坏循环等待条件:按照顺序请求资源,避免循环等待情况。

6.sleep()和wait()的区别和共同点?

1.sleep()方法没有释放锁,wait()会释放锁。
2.sleep()通常用来暂停线程。到了时间会自动苏醒。wait()通常用来线程间交互/通信,不会自动苏醒,需要其他线程调用notify()或者notifyAll()。

7.调用start方法会执行run()方法,为什么不能直接调用run()方法?

start()会执行线程的准备工作,然后得到时间片后就可以执行run()方法的内容了。但是run()方法本质上是一个普通方法。如果直接执行,那就没有新建线程,就是在原来的线程执行的。只有执行了start()方法,才能启动多线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/437311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Unity:Animation 三 Playable、ImportModel

目录​​​​​​​ 1. Playables API 1.1 Playable vs Animation 1.2 Advantages of using the Playables API 1.3 PlayableGraph Visualizer 2. Creating models outside of Unity 2.1 Preparing your model files for export 2.1.1 Scaling factors 2.1.2 优化模型文…

Unity中关于继承ScriptableObject的类

在游戏中我们会经常看到一些.asset的配置文件,而这些文件就是用一个自定义的类去继承ScriptableObject来生成的。比如当前有一些零散特效需要预加载,这个时候我们可以声明一个类去保存这些零散特效对象的信息,然后统一读取加载。 代码&#…

专访|云安全攻防:从理论到应用的全面探索

2023年11月,美国核研究实验室(INL)遭遇数据泄露。同年10月,索尼的员工数据在MOVEit攻击事件中被泄露。2024年2月,某知名制造商因云存储服务器的配置错误导致了敏感数据泄露。 这些事件表示企业必须重视云安全建设&…

【Memory协议栈】NVRAM Manager 模块介绍

目录​​​​​​​ 前言 正文 1.功能简介 2.关键概念 3.功能详解 3.1 内存硬件抽象层Ea/Fee的寻址方案 3.2 基本存储对象Basic storage objects 3.2.1 NV Block 3.2.2 RAM Block 3.2.3 ROM Block 3.2.4 Administrative block 3.2.5 NV Block Header 3.3块管理类型…

iostat命令详解

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 iostat是一个使用频率较高的命令,主要用来统计和输出CPU和磁盘IO信息。它的安装很简单: # yum -y insta…

20240307-1-前端开发校招面试问题整理JavaScript

前端开发校招面试问题整理【1】——JavaScript 1、JavaScript 基础 Q:介绍 js 的基本数据类型? 基本类型(值类型):String,Number,Boolean,Null,Undefined,S…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日,由杭州城西科创大走廊管理委员会指导,中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果,创邻科技受邀参会并被…

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Java面试篇【MyCat】常见面试题(2024最新)

Mycat 1.Mycat 分库分表中间件,将存放在一个数据库的数据存放在不同的多个数据库中。来分散负载。 scheme 逻辑库,对应mysql的数据库,一个逻辑库定义了包含的所有table.是数据库集群对外的统一访问接口。table 逻辑表,和物理数…

08 |「Fragment 」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、简介1、是什么2、为什么要有 Fragment3. Fragment 详细解释 二、Fragment 与 Activity 的直观理解三、Fragment 的创建1、Fragment 的创建方式2、Fragment 的增删替查1) 替换(常见&…

每日学习总结20240306

每日总结 20240306 1. 断言测试判断 #include <iostream> #include <assert.h> #include <cassert> #include <stdio.h>#define STR_OK "[\x1b[1;32m OK \x1b[0m]" #define STR_FAIL "[\x1b[1;31mFAIL\x1b[0m]"…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

TikTok小店如何批量生成/上传产品视频?

有许多Shopee卖家都会遇到这样的问题&#xff1a;明明产品标题、描述优化了&#xff0c;产品主图也认真做了&#xff0c;但是自己的Shopee店铺还是没转化! 可能是忽略了产品视频。 在Shopee官方的交流沙龙中&#xff0c;Shopee官方讲师提及&#xff1a;“有视频的产品比没有视…

插件WebApiClient.JIT报异常Cannot access a disposed object

调第三方接口使用的是插件WebApiClient.JIT 这个插件很好用&#xff0c;一直使用的都没问题&#xff0c;但是今天却出现了一个奇怪的问题&#xff0c;放在循环里调接口抛异常“Cannot access a disposed object” 调了login接口后IsDisposed true&#xff0c;再使用_erpOutAp…

基于Llama 2家族的提示词工程:Llama 2 Chat, Code Llama, Llama Guard

Prompt Engineering with Llama 2 本文是学习 https://www.deeplearning.ai/short-courses/prompt-engineering-with-llama-2/ 的学习笔记。 文章目录 Prompt Engineering with Llama 2What you’ll learn in this course [1] Overview of Llama Models[2] Getting Started wi…

【DP】蓝桥杯第十三届-费用报销

#include<iostream> #include<algorithm> #include<cstring> #include<set> #include<queue> using namespace std; const int N1010; int dp[N][5010];//dp[i][j]:选到第i个物品是否能取到价值j&#xff1b; int month[13]{0,31,28,31,30,31,30…

Vivado HLS学习笔记

任意精度的数据类型 u 代表 unsigned&#xff0c;fixed代表定点数据&#xff0c;即常数 采用任意精度的数据类型可以使用更少的资源&#xff0c;硬件友好性 数据类型定义在 header file 中 表示任意进制 ap_int<6> a("101010",2); //二进制数据101010 ap_in…

一个比较全面实用的C#帮助类、工具类库

前言 经常会有一些同学会问为什么感觉我身边的大佬写一个功能会这么快&#xff1f;一个类似的模块大佬可能半天就搞定了&#xff0c;而我要搞一两天。其实工作久了你会发现很多常用公共的帮助类和工具类&#xff0c;如常见的Excel数据导入导出、文件操作、字符串操作、数据转换…

【Spring】yaml自定义参数添加提示功能

文章目录 1. 说明2. 依赖3. 处理流程&#xff08;以自定义swagger配置为例&#xff09;3.1 定义自定义参数SwaggerProperties3.2 通过Configuration启用并使用自定义参数 4. 使用 返回首页 1. 说明 编写SpringBoot项目时是不是羡慕spring以及第三方插件的自动提示功能。其实实…