廊坊网站建设费用/企业营销模式
📃个人主页:个人主页
🔥系列专栏:Java面试专题
1.线程和进程的区别
线程和进程都是操作系统中的概念,它们的主要区别如下:
-
资源分配:进程是操作系统中的资源分配的基本单位,每个进程都有独立的内存空间、文件句柄等资源,而线程是进程中的一个实体,它与其他线程共享同一进程的资源。
-
调度:进程拥有自己的调度器,由操作系统负责进行调度,而线程则由进程的调度器进行调度,操作系统不能直接对线程进行调度。
-
运行效率:线程相比进程来说更加轻量级,创建和销毁的开销小,切换上下文也更快,因此线程的运行效率更高。
-
通信方式:进程之间的通信需要经过操作系统的管道或共享内存等机制,而线程之间可以直接共享同一进程的内存空间,因此线程间通信更加快捷。
2.并行与并发的区别
在多核CPU的情况下:
并发是同一时间应对多件事情的能力,例如:多个线程轮流使用一个CPU。
并行是同一时间动手做多件事情的能力,例如:4核CPU同时执行4个线程。
3.创建线程的方式有哪些
- 通过继承Thread类创建线程。需要重写run()方法,启动线程时,通过调用start()方法启动。
- 通过实现Runnable接口创建线程。需要重写run()方法,启动线程时,将自定义类的实例作为一个参数,调用Thread的构造方法,得到一个线程实例,再调用start()方法启动。
- 通过实现Callable接口创建线程。需要重写call()方法,启动线程时,需要新建一个Callable的实例,再用FutureTask实例包装它,最终再包装成Thread实例,调用start()方法启动,并且可以通过FutureTask的get()方法来获取返回值。
-
使用线程池,可以通过调用Executors类的静态方法创建线程池,然后向线程池中提交任务来创建线程。
4.Runnable和Callable有什么区别
-
Runnable不会返回结果或抛出异常,而Callable会返回结果或抛出异常。
-
Callable接口中定义的方法是call()方法,而Runnable接口中定义的方法是run()方法。
-
Callable可以通过Future接口来获取执行结果,而Runnable没有这样的机制。
-
Callable的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常。
5.run()和start()有什么区别
-
run()方法定义了线程的主要内容,是实际执行的代码。但是,当使用run()方法时,代码执行在当前线程中,并没有创建新线程。可以被调用多次(就和普通方法一样)
-
start()方法启动一个新线程来执行run()方法中的代码。当使用start()方法时,代码将在新线程中执行,并且在主线程中继续执行其他代码。只能被调用一次。
6.线程包括那些状态
Java线程包括如下状态:
-
新建状态(New):当线程对象被创建时,它处于新建状态。
-
可执行状态(Runnable):当调用start()方法后,线程开始执行,进入可运行状态。可运行状态包括正在运行和就绪两种情况。
-
阻塞状态(Blocked):如果没有获取锁(synchronized或lock)进入阻塞状态,获得锁再切换为可执行状态
-
等待状态(Waiting):如果线程调用wait()方法进入等待状态,其他线程调用notify()唤醒后可以切换为可执行状态
-
计时等待状态(Timed Waiting):如果线程调用sleep(100)方法,进入计时等待状态,到时间后可切换为可执行状态
-
终止状态(Terminated):线程执行完成或者发生了未捕获的异常,进入终止状态。
7.新建T1、T2、T3三个线程,如何保证他们顺序执行
可以使用线程.join()方法来保证三个线程的顺序执行。具体实现方法如下:
public class Main { public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { // 线程T1的代码 System.out.println("Thread T1"); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { // 线程T2的代码 System.out.println("Thread T2"); } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { // 线程T3的代码 System.out.println("Thread T3"); } }); // 启动线程,并使用join()保证顺序执行 t1.start(); t1.join(); // 等待t1执行完毕 t2.start(); t2.join(); // 等待t2执行完毕 t3.start(); t3.join(); // 等待t3执行完毕 }
}
8.notify()和notifyAll()有什么区别
notify()
和notifyAll()
都是Java中用于线程同步的方法,但它们的使用方式和作用有所不同。
notify()
:这个方法用于唤醒在此对象监视器上等待的单个线程。如果有多个线程在等待,它将唤醒其中一个线程。被唤醒的线程将获得锁,然后执行。notifyAll()
:这个方法用于唤醒在此对象监视器上等待的所有线程。当一个线程在对象上调用wait()
方法时,它会在那个对象上等待,直到其他线程在该对象上调用notify()
或notifyAll()
方法。当notifyAll()
方法被调用时,所有在该对象上等待的线程都会被唤醒,所有的这些线程将尝试获取锁,然后其中的一个将获得锁并执行。
简单来说,notify()
用于唤醒单个线程,而notifyAll()
用于唤醒所有等待的线程。在多线程编程中,合理使用这两个方法可以帮助我们更好地控制线程的执行顺序和同步。
9.在java中wait和sleep方法的不同
在Java中,wait()
和sleep()
方法都是用来暂停线程的执行,但是它们的使用方式和效果有很大的不同。
sleep()
方法:这个方法是Thread
类的一个静态方法。它会使当前线程暂停执行一段时间,这段时间内线程不会消耗CPU资源。在指定的时间间隔之后,线程会重新启动。注意,sleep()
方法需要一个参数,这个参数是线程暂停的时间,单位是毫秒。
Thread.sleep(2000); // 线程会暂停2秒
wait()
方法:这个方法是Object
类的一个成员方法。它会使当前线程等待,直到其他线程调用同一个对象的notify()
或notifyAll()
方法。在等待期间,线程不会消耗CPU资源。注意,wait()
方法需要在对象上调用,并且需要在一个同步上下文中。也就是说,它通常被包含在一个synchronized
块或者方法中。
synchronized (object) { while (<condition does not hold>) object.wait(); // perform action appropriate to condition
}
在这个例子中,线程会等待,直到<condition does not hold>
变为false
。然后,线程会继续执行。
总的来说,sleep()
和wait()
的主要区别在于:
sleep()
是静态方法,可以在任何地方调用,但它不会检查任何条件;而wait()
是对象的方法,必须在同步上下文中调用,它会检查一个条件并决定是否等待。sleep()
会导致线程阻塞一段时间,这段时间内线程不会消耗CPU资源;而wait()
会导致线程进入等待状态,直到其他线程调用同一个对象的notify()
或notifyAll()
方法。在这段时间内,线程不会消耗CPU资源。sleep()
和wait()
都需要一个时间参数,但是这个参数的含义不同。对于sleep()
,它是暂停的时间;对于wait()
,它是等待的最大时间(毫秒),如果在这个时间内没有接收到通知,那么线程会重新竞争锁并重新检查条件。
10.如何停止一个正在运行的线程
①使用一个标志位来通知线程可以安全地终止其执行
class MyThread extends Thread { private volatile boolean running = true; public void run() { while (running) { // ... do some work ... } } public void shutdown() { running = false; }
}
在这个例子中,当shutdown()
方法被调用时,线程将停止其执行。当然,线程应该定期检查running
变量的值,并在可能的情况下安全地退出循环。这样,线程就可以在适当的时候结束其执行。
②使用stop方法强行终止(不推荐,方法已经作废)
③使用interrupt方法中断线程
在Java中,你可以使用interrupt
方法来尝试中断一个线程。但是,你需要注意的是,interrupt
方法并不会立即终止线程,而是会设置一个中断标记,你需要在线程的中断处理代码中响应这个中断。
以下是一个简单的例子,说明如何中断一个线程:
public class MyThread extends Thread { public void run() { while (!Thread.currentThread().isInterrupted()) { // 线程的逻辑... } }
} public class Main { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); // 在需要的时候中断线程 myThread.interrupt(); }
}
在这个例子中,MyThread
类继承了Thread
,并重写了run
方法。在run
方法中,我们在循环中检查线程是否被中断。如果线程被中断,isInterrupted
方法会返回true
,这样我们就可以退出循环。
在主方法中,我们创建了一个MyThread
对象,并启动了线程。然后,我们使用interrupt
方法来中断线程。
请注意,这只是一个简单的例子。在实际的程序中,你可能需要在更复杂的逻辑中处理线程的中断。例如,如果你的线程是在一个阻塞操作(如Thread.sleep
或Object.wait
)中,那么当调用interrupt
方法时,线程会收到一个InterruptedException
。你需要在代码中处理这个异常,并响应中断。
相关文章:

【面试专题】并发编程篇①
📃个人主页:个人主页 🔥系列专栏:Java面试专题 1.线程和进程的区别 线程和进程都是操作系统中的概念,它们的主要区别如下: 资源分配:进程是操作系统中的资源分配的基本单位,每个进程…...

Linux Centos7安装后,无法查询到IP地址,无ens0,只有lo和ens33的解决方案
文章目录 前言1 查看network-scripts目录2 创建并配置 ifcfg-ens33 文件3 禁用NetworkManager4 重新启动网络服务总结 前言 在VMware中,安装Linux centos7操作系统后,想查询本机的IP地址,执行ifconfig命令 ifconfig结果如下: 结…...

行为型模式-访问者模式
在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就…...

go-kit中如何开启websocket服务
在Go-Kit中,可以使用github.com/go-kit/kit/transport/http包来开启WebSocket服务。以下是一个简单的示例代码,演示了如何在Go-Kit中开启WebSocket服务: package mainimport ("context""fmt""net/http""…...

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议
在企业内部沟通与协作中,视频会议成为了一种必不可少的沟通方式。然而,传统的互联网视频会议往往受制于网络不稳定因素,给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件,致力于为企业打造高效、稳定的内网视频…...

国际权威媒体聚焦:孙宇晨和波场TRON在迪拜荣获加密行业重磅奖项
近日,在迪拜举行的区块链生态大会(Blockchain Life Conference)上,波场TRON创始人、火币HTX全球顾问委员会委员孙宇晨斩获“年度加密企业家”称号,波场TRON荣膺“年度最佳 Layer 1”大奖。这一消息迅速得到彭博社、雅虎财经、美联社和法国最大媒体之一Le Figaro等国际权威媒体的…...

新闻详情。
<!DOCTYPE html> <html><head><title>新闻</title><meta http-equiv"content-type" content"text/html; charsetutf-8"/><meta name"apple-mobile-web-app-capable" content"yes"/><lin…...

Java面试题-Redis-第二天(Redis持久化、过期键删除策略、内存淘汰策略)
目录 一、Redis持久化机制 二、Redis过期键删除策略 三、Redis内存淘汰策略 一、Redis持久化机制 为了能重用Redis数据,防止系统故障造成数据丢失,我们就需要将Redis中的数据写入到磁盘中,也就是持久化 1. 有哪些方式 有rdb和aof两种方式…...

ElasticSearch快速入门实战
全文检索 什么是全文检索 全文检索是一种通过对文本内容进行全面索引和搜索的技术。它可以快速地在大量文本数据中查找包含特定关键词或短语的文档,并返回相关的搜索结果。全文检索广泛应用于各种信息管理系统和应用中,如搜索引擎、文档管理系统、电子…...

揭秘MySQL数据同步至Elasticsearch的最佳方案与技巧
本文介绍下当前常见的场景之一:Mysql数据同步Elasticsearch的实现方案,这里以电商为例,其实所有相关搜索内容都可以使用此方案。 对于搜索,应该是所有APP必备的基础功能,不同时期有不同的解决方案,本次重点…...

正点原子嵌入式linux驱动开发——Linux RTC驱动
RTC也就是实时时钟,用于记录当前系统时间,对于Linux系统而言时间是非常重要的,就和使用Windows电脑或手机查看时间一样,在使用Linux设备的时候也需要查看时间。本章就来学习一下如何编写Linux下的RTC驱动程序。 Linux内核RTC驱动…...

基于EasyCVR技术的大数据视频汇聚与智能分析平台设计方案
一、背景需求 大数据中心的数据建设如火如荼,针对其中城市中的视频监管及算法分析,各卡口监控、治安监控,电警监控不同网络、不同地域,如何进行视频融合、进行统一监管,则是大数据中心解决方案数据汇聚的重中之重。 现…...

骨传导耳机到底好用吗,到底骨传导耳机是不是噱头呢?
随着社会的飞速发展以及科技的不断提升,人们对健康的关注度也逐渐提高起来。而在这种背景下,骨传导耳机以其独特不可替代的优势,吸引了一大群骨传导爱好者的目光。 那么骨传导耳机是不是噱头呢?其实这种耳机不仅不会堵塞耳道&…...

bitsandbytes 遇到CUDA Setup failed despite GPU being available.
使用conda 管理环境时加载大模型会遇到bitsandbytes无法识别cuda的情况: 此处windows系统: pip install bitsandbytes-windowslinux 系统: 将bitsandbytes版本降低至0.39.0 pip install bitsandbytes0.39.0...

【机器学习】决策树与分类案例分析
决策树与分类案例分析 文章目录 决策树与分类案例分析1. 认识决策树2. 分类3. 决策树的划分依据4. 决策树API5. 案例:鸢尾花分类6. 决策树可视化7. 总结 1. 认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最…...

基于物联网、大数据、云计算、人工智能等技术的智慧工地源码(Java+Spring Cloud +UniApp +MySql)
智慧工地是指利用物联网、大数据、云计算、人工智能等技术手段,为建筑施工现场提供智能硬件及物联网平台的解决方案,实现建筑工地的实时化、可视化、多元化、智慧化、便捷化。智慧工地的建设目标是实现全天候的管理监控,提高施工效率和质量&a…...

Py之pypdf:pypdf的简介、安装、使用方法之详细攻略
Py之pypdf:pypdf的简介、安装、使用方法之详细攻略 目录 pypdf的简介 pypdf的安装 pypdf的使用方法 1、基础用法 pypdf的简介 pypdf是一个免费的、开源的纯python PDF库,能够拆分、合并、裁剪和转换PDF文件的页面。它还可以为PDF文件添加自定义数据…...

谷歌Bard更新!会有哪些体验升级?
今年2月,谷歌的对话机器人Bard在发布会上翻车,遭到了科技圈的群嘲。如今半年过去了,Bard卷土重来,在9月发布了它的重磅更新“扩展插件”,集成了Gmail、Google Docs、Youtube 、Google Drive、Google Maps、Google Flig…...

[SHCTF 2023 校外赛道] reverse
week1 ez_asm 想不到第1题是个汇编,咱也不知道拿啥能弄成c,不过这题也不难,直接能看懂,关键部分。 取出异或0x1e然后保存,再取出-0xa再保存。 .text:0000000000401566 loc_401566: …...

pytorch:Model模块专题
一、说明 关于pytorch使用中,模块扮演重要校色,大部分功能不能密集展现,因此,我们这个文章中,将模块的种种功能详细演示一遍。 二、模块 PyTorch使用模块来表示神经网络。模块包括: 有状态计算的构建块。…...

Spring更加简单的读取和存储对象
前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象! 本…...

Webpack5 系列:Babel 的配置
1.前言 本篇将介绍对于项目中 JS 文件的处理。 2.babel-loader 2-1.依赖安装 npm install -D babel-loader babel/core babel/preset-env2-2.Loader 配置 webpack.config.js module: {rules: [{test: /\.?js$/,exclude: /node_modules/,use: {loader: babel-loader}}] }…...

【Spring】DI依赖注入,Lombok以及SpEL
文章目录 1.什么是DI依赖注入2. set方法注入3. ref属性4. 有参构造方法注入5. Lombok6. SpEL 1.什么是DI依赖注入 依赖注入(Dependency Injection,简称DI)是一种设计模式,也是Spring框架的核心概念之一。其基本思想是将程序中的各…...

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观
dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例,包括自定义任务、网格的新外观等,来展示其功能的强大性&…...

auto自动类型推导总结
auto 自动推导的规则很多、很细,当涉及移动语义、模板等复杂的规则时,很容易绕进去。因此,在使用 auto 进行自动推导时,牢记以下几点: auto 推导出的是 “值类型”,不会是 “引用类型”。auto 可以和 cons…...

透视2023,如何看清中国SaaS的未来之路?
导读:什么是更适合中国市场的SaaS道路? 如果用一个关键词概括2023年的SaaS产业,很多人会想到:难。 在过去一年时间内,SaaS产业投融资环境巨变,一级市场投融资笔数和金额骤减。根据IT桔子数据,20…...

分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)
分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制) 目录 分类预测 | Matlab实现KOA-CNN-LSTM-selfAttention多特征分类预测(自注意力机制)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…...

博客系统-项目测试
自动化博客项目 用户注册登录验证效验个人博客列表页博客数量不为 0 博客系统主页写博客 我的博客列表页效验 刚发布的博客的标题和时间查看 文章详情页删除文章效验第一篇博客 不是 "自动化测试" 注销退出到登录页面,用户名密码为空 用户注册 Order(1)Parameterized…...

Inspeckage,动态分析安卓 APP 的 Xposed 模块
前提 我在不久前写过《 APP 接口拦截与参数破解》的博文;最近爬取APP数据时又用到了相关技术,故在此详细描述一下 Inspeckage 的功能。(环境准备本文不再赘述) 功能 在电脑上访问 http://127.0.0.1:8008 就可以看到 inspeckage…...

Windows详细安装和彻底删除RabbitMQ图文流程
RabbiitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而聚类和故障转移是构建在开放…...