Java面试题:多线程1

线程和进程的区别

进程

程序由指令和数据组成

指令的运行和数据的读写依赖于将指令加载到CPU,数据加载到内存,在指令运行过程中还需要用到IO设备

进程就是用以加载指令,管理内存,管理IO的
当一个程序被运行,从磁盘加载这个程序的代码到内存,就开启了一个线程
多实例进程和单实例进程

是否能在系统中打开多份

线程

一个线程就是一个指令流

将指令流中的指令交给CPU执行

一个进程中可以有多个线程

对比

进程是运行程序的实例,进程包含了多个线程,每个线程任务不同

不同进程使用不同内存空间,当前进程下的所有线程可以共享内存空间

线程更加轻量,切换相较进程成本低

并行和并发的区别

对于单核CPU来说,所有线程都是串行执行,将时间片分给不同的程序使用,在不同线程间来回切换.(并发)

对于多核CPU来说,就可以实现并行执行,不同核心在同一时间片内执行不同线程.(并行)

线程的状态和状态切换

NEW
//等待启动
RUNNABLE
//可运行
BLOCKED
//阻塞
WAITING
//等待
TIMED_WAITING
//指定等待时间
TERMINATED
//终止

新线程(NEW)在start()方法启动时变为就绪状态->运行状态(RUNNABLE),运行结束后终止被回收(TERMINATED)

如果加锁,线程被锁阻塞即BLOCKED状态

如果被wait()即WAITING状态

如果被sleep(100)即TIMED_WAITING状态

创建线程的方式有哪些

继承Thread()类
//重写run方法
class MyThread() extends Thread{@Overridepublic void run(){}
}
实现runnable接口
//重写run方法
class MyRunnable inplements Runnable{@Overridepublic void run(){}
}
实现Callable接口
//重写call方法
class MyCallable implements Callable<String>{@Overridepublic String call(){}
}main(){MyCallable mc = new MyCallable();FutureTask<String> ft = new FutureTask<String>(mc);Thread t1 = new Thread(ft);String result = ft.get();
}
线程池创建线程
//创建线程池对象
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQuene<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler
)
new ThreadPoolExecutor(...);
TE.submit()

corePoolSize:指定线程池的核心线程数量

maximumPoolSize:指定线程池的最大线程数量(核心+临时)

keepAliveTime:指定临时线程的存活时间

unit:指定临时线程存活的时间单位(秒,分,时,天)

workQueue:指定线程池的任务队列,阻塞队列(BlockingQueue<>的实现类对象)

threadFactory:指定线程池的线程工厂(创建线程的地方)

handler:指定线程池的任务拒绝策略(任务队列满时,新任务来怎么处理)

runnable 和 callable 的区别

1,Runnable接口run方法没有返回值,但callable接口call方法有泛型返回值,和Future和FutureTask配合可以用以获取异步执行的结果

2,call()方法允许抛出异常,但run()方法抽象方法声明时没有抛出,所以run()方法重写时只能在内部处理不能抛出

线程的执行

使用start()启动,只能执行一次调用run方法中的逻辑,(开启线程执行)

保证线程的顺序执行

join方法

使用join()方法可以阻塞当前的线程,直到调用join()方法的线程执行完毕才会继续执行

eg:

new Thread(()->{t1.join;
})

直到线程t1执行结束之后才会继续执行

notify()和notifyAll()的区别

notify():随机唤醒一个线程

notifyAll():唤醒所有wait()的线程

wait()方法和sleep()方法的异同

同:都能让目前线程暂时放弃cpu使用权,陷入阻塞状态

异:

方法归属不同

sleep()方法是Thread的静态方法

wait()方法是Object的成员方法

醒来时机不同

sleep(100)和wait(100)都会在对应时间后醒来

但wait()如果不被唤醒就会一直阻塞

都可以被打断唤醒

锁特性不同

wait方法的调用必须先获取wait对象的锁,(必须和synchronized一起使用)

sleep不需要

wait方法执行后会先释放锁,允许其他线程竞争

但sleep方法执行后不会释放锁

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

[Django 0-1] Core.Serializers 模块

Core.Serializers 模块 Django 序列化模块 模块结构 . ├── __init__.py ├── base.py ├── json.py ├── jsonl.py ├── python.py ├── pyyaml.py └── xml_serializer.py1 directory, 7 files自定义序列化器 通过继承django.core.serializers.base.Serial…

C语言 举例说明循环嵌套

今天 我们来说循环的嵌套 如果一个循环体内 又包含了另一个循环结构 我们称之为循环的嵌套 我们之前学的 While do-while for 都可以进行相互的嵌套 如下图 在 While 循环语句中再嵌套一个 While 循环语句 do-while 中嵌套 do-while for中嵌套 for 例如 我们做一个九九乘法…

Vue3 + Pinia + Vite5 仿抖音的项目

github地址 https://github.com/zyronon/douyin 这个项目其实在我收藏夹里好多天了&#xff0c;实在没得写了&#xff0c;简单写一下他。 官方介绍 douyin-vue 是一个模仿 抖音|TikTok 的移动端短视频项目。Vue 在移动端的"最佳实践"&#xff0c;媲美原生 App 丝…

Oracle Database 23ai 正式发布,超级巨兽(集关系型、向量、文档、图、缓存、分布式数据库一体的全能数据库)

Oracle23c改名为Oracle23ai&#xff0c;也意味着Oracle数据库正式从Cloud进入AI时代。Oracle23ai版本是一个超级巨兽&#xff0c;简单总结下&#xff1a; AI能力&#xff1a;内置向量数据库&#xff0c;内置ONNX模型数据处理&#xff0c;内置Text2SQL&#xff0c;内置的机器学习…

QT5之lambda+内存回收机制

使用lambda需要 配置c11 所以在点.pro文件里面配置添加如下 CONFIG c11 使用到qDebug 打印包含头文件 #include<QDebug> lambda 表达式使用 代替槽如下 #include "mainwidget.h" #include<QPushButton> #include<QDebug> mainWidget::mainWid…

js模块化:修改导入模块的内容,会有影响吗?

起因 element-ui的popper组件相关的层级&#xff0c;是使用popup-manager来统一管理的。 之前试图在自己的组件里导入并使用element-ui的popup-manager&#xff0c;但是层级老是和element-ui组件的层级冲突&#xff0c;看了下源码&#xff0c;竟意外发现&#xff0c;使用popu…

毕业设计参考-PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序,OpenCV、Modbus通信、YOLO目标检测综合应用

“PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序”是一个特定的软件程序&#xff0c;用于通过图像处理和目标检测技术来测量鱼类的长度。 视频效果&#xff1a; 【毕业设计】基于yolo算法与传统机器视觉的鱼头鱼尾识别_哔哩哔哩_bilibili 这个程序结合了多种技术&#xff1a; 1. OpenCV…

【Linux极简教程】常见实用命令不断更新中......

【Linux极简教程】常见实用命令不断更新中...... 常见问题1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dpkg) 常见问题 1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dp…

纳米体育数据足球数据接口:体彩数据包接口文档API示例②

纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口&#xff0c;无请求次数限制&#xff0c;可按需购买&#xff0c;接口稳定高效&#xff1b;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。 纳米数据API2.0版本…

【Docker】★★★

docker 的网络模式 ●host模式&#xff1a;使用 --nethost 指定 容器与宿主机共享网络命名空间、ip和端口 ●container模式&#xff1a;使用 --netcontainer:NAME_or_ID 指定 新建的容器共享已有容器的网络命名空间、ip和端口 ●none模式&#xff1a;使用 --netnone 指定 不进行…

05. 基于Verilog的呼吸灯程序设计

05_led_breath_v0 一个基于Verilog的呼吸灯程序示例&#xff0c;该程序通过PWM&#xff08;脉冲宽度调制&#xff09;技术来模拟呼吸灯的效果&#xff0c;逐渐变亮再逐渐变暗的LED灯&#xff0c;给人一种灯光在“呼吸”的感觉。 原理解释&#xff1a; PWM(脉冲宽度调制)&…

阿里实习生:面试阿里其实并没有那么难。

愉快的五一假期已经结束了, 又要投入到学习和工作当中了。 今天分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。 Go里有哪些数据结构是并发安全的&#xff1f; 并发安全就是程序在并发的情况下执行的结果都是正确的&#xff1b; Go中数据类型分为两大类&#xff…

Python 连接 Oracle 数据库加入超时处理机制

Python 连接 Oracle 数据库加入超时处理机制 0. 引言1. 示例代码 0. 引言 Python 连接 Oracle 数据库&#xff0c;如何 SQL 语句有问题时还不加入超时机制&#xff0c;就会一致执行停止在那里。 1. 示例代码 1-1. 代码讲解 下面的代码展示了如何在 Python 中使用多线程来处…

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目&#xff0c;简单易上手&#xff0c;而且不需要任何投入&#xff0c;经过测试收益非常可观&#xff0c;软件完全免费&#xff0c;特别适合没有时间但是想做副业的家人们

ai生图什么软件好?推荐7个不错的AI绘画软件

ai生图什么软件好&#xff1f;推荐7个不错的AI绘画软件&#xff01;小编带你进入一个创意与科技交融的奇妙世界——AI绘画&#xff0c;让我们一同领略其中的魅力吧~ 一、爱制作AI 这款AI人工智能软件是一款多功能的工具平台&#xff0c;集合了AI问答、AI绘画和AI智能写作等功能…

在离线环境中将运行 Oracle DB 12c 的 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文只是说明如何在 CentOS 7.5 上准备 Oracle DB 12c 验证环境&#xff0c;而将该环境升级并迁移至 RHEL 7.9 的操作过程请参见&#xff1a;《在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9》一文。 另外&#xff…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我&#xff0c;现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着&#xff0c;让我时刻感觉到&#xff0c;再过10年&#xff0c;我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高&#xff0c;我真心希望…

生产者与消费者 PV操作 与 阻塞队列

文章目录 普通方式 wait 与 notifyAll消费者生产者桌子测试类运行结果 阻塞队列Cook生产者Customer消费者测试类 普通方式 wait 与 notifyAll 消费者 package abc;public class Customer extends Thread{Overridepublic void run() {while (true) {synchronized (Desk.lock) {…

音频文件转文字怎么操作?3个方法手把手教你

音频文件转文字怎么操作&#xff1f;音频文件转文字&#xff0c;即将音频中的语音内容转换为可编辑和搜索的文本格式&#xff0c;是一项在多个场景中都非常实用的技术。无论是在会议记录、采访整理、学习笔记&#xff0c;还是视频字幕制作等场景中&#xff0c;音频转文字技术都…