当前位置: 首页 > news >正文

Java多线程基础面试总结(二)

创建三种线程的方式对比

使用实现Runnable、Callable接口的方式创建多线程。

优势

Java的设计是单继承的设计,如果使用继承Thread的方式实现多线程,则不能继承其他的类,而如果使用实现Runnable接口或Callable接口的方式实现多线程,还可以继承其他类。

采用接口能够更好的实现数据共享。线程的启动需要Thread类的start方法,如果采用继承的方式每次新建一个线程时,每个新建线程的数据都会单独的存在线程内存中,这样每个线程会单独的操作自己线程的数据,不能更好的实现线程之间的数据共享。

劣势

编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

使用继承Thread的方式实现多线程测试案例

public class ThreadTest extends Thread{public int count = 10;@Overridepublic void run() {count--;System.out.println(this.getName()+"的count:"+count);}public static void main(String[] args) throws InterruptedException {Thread thread1 = new ThreadTest();//thread1有自己的数据——countThread thread2 = new ThreadTest();//thread2有自己的数据——countthread1.start();Thread.sleep(100);thread2.start();}
}

运行结果

Thread-0的count:9
Thread-1的count:9
使用实现Runnable、Callable接口的方式创建多线程测试案例
public class RunnableTest implements Runnable{public  int count = 10;@Overridepublic void run() {count--;System.out.println(Thread.currentThread().getName()+"的count:"+count);}public static void main(String[] args) throws InterruptedException {RunnableTest runnableTest = new RunnableTest();//threa1和threa2共享同一个数据——countThread thread1 = new Thread(runnableTest);Thread thread2 = new Thread(runnableTest);thread1.start();Thread.sleep(100);thread2.start();}
}

运行结果

Thread-0的count:9
Thread-1的count:8

使用继承Thread类的方式创建多线程

  • 优势:
    编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

  • 劣势:
    线程类已经继承了Thread类,所以不能再继承其他的类。

Runnable和Callable的区别

与Runnable相比,Callable功能更强大些

  • Callable规定(重写)的方法是call(),Runnable规定(重写)的方法是run()。
  • Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
  • call方法可以抛出异常,run方法不可以。
  • Callable是支持泛型的
  • 运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

Runnable接口源码

@FunctionalInterface
public interface Runnable {public abstract void run();
}

Callable接口源码

@FunctionalInterface
public interface Callable<V> {/*** Computes a result, or throws an exception if unable to do so.** @return computed result //可以有返回值* @throws Exception if unable to compute a result  //可以抛出异常*/V call() throws Exception;
}

Callable接口使用案例

/*
创建线程的方式三:实现Callable接口。-----JDK1.5新增*/
//1.创建一个实现Callable的实现类
class NumThread implements Callable{//2.实现call方法,将此线程需要执行的操作声明在call()中@Overridepublic  Object call() throws Exception{int sum=0;for (int i=1;i<=100;i++){sum+=i;}return sum;}
}
public class ThreadNew {public static void main(String[] args) throws ExecutionException, InterruptedException {//3.创建Callable接口实现类的对象NumThread numThread=new NumThread();//4.将此Callable接口实现类的对象作为传递到FutureTask构造中,创建FutureTask的对象FutureTask futureTask=new FutureTask(numThread);//5.将FutureTask的对象组排位哦参数传递到thread类的构造器中,创建Thread对象,并调用start()new Thread(futureTask).start();//6.获取Callable中call方法的返回值//get()返回值即为FutureTask构造器参数Callable实现类重写的call()的返回值Object sum = futureTask.get();System.out.println("总和为:"+sum);}
}

Threa类基本属性和方法(最基本的)

基本属性


/**
* 线程的优先级
* 线程分为10个优先级,分别用整数1——10表示,其中1为最低优先级,10为最高优先级,5为默认优先级,
* 在操作系统中,线程可以划分优先级,线程优先级越高,获得 CPU 时间片的概率就越大,但线程优先级的高低与线程的执行顺序并没有必然联系,优先   * 级低的线程也有可能比优先级高的线程先执行。
*/// 线程可以具有的最高优先级
static int	MAX_PRIORITY 
// 线程可以具有的最低优先级    
static int	MIN_PRIORITY 
// 分配给线程的默认优先级(默认为5)       
static int	NORM_PRIORITY       

基本方法

 //返回对当前正在执行的线程对象的引用static Thread	currentThread() //返回该线程的名称   String	getName() //返回线程的优先级  int getPriority() //如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。       void run() //设置线程名称        void setName(String name) //设置线程的优先级。     void setPriority(int newPriority) //使该线程开始执行,Java 虚拟机调用该线程的 run 方法。       void start()        

相关文章:

Java多线程基础面试总结(二)

创建三种线程的方式对比 使用实现Runnable、Callable接口的方式创建多线程。 优势 Java的设计是单继承的设计&#xff0c;如果使用继承Thread的方式实现多线程&#xff0c;则不能继承其他的类&#xff0c;而如果使用实现Runnable接口或Callable接口的方式实现多线程&#xf…...

NS32F407VGT6 NS32F407VET6软硬件通用STM32F407VGT6 407VET6

NS32F407VGT6 NS32F407VET6 器件基于高性能的 ARM Cortex-M4 32 位 RISC 内核&#xff0c;工作频率高达 168MHz 。 Cortex-M4 内核带有单精度浮点运算单元 (FPU) &#xff0c;支持所有 ARM 单精度数据处理指令和数据类型。它还 具有一组 DSP 指令和提高应用安全性的一…...

Openstack: network: ovs: dpif/show 实例分析:interface

[TOC 实例 [cbis-adminovercloud–13 (overcloudrc) ~]$ sudo ovs-appctl dpif/show systemovs-system: hit:75198007884 missed:109924265 br-ex: br-ex 65534/3: (internal) ,65534 是port number; OpenFlow port number&#xff1b; 3 是 ofp_port_to_odp_port(ofproto, o…...

必要的项目管理软件因素

什么样的项目管理软件好&#xff1f;对于一个项目团队来说&#xff0c;从项目开始到项目结束&#xff0c;需要多个部门的配合。每个成员可能会参与一个以上的项目&#xff0c;这通常需要并行的多个项目。据介绍&#xff0c;国外90%以上的项目是用软件管理的&#xff0c;而中国只…...

大学刚毕业,用10000小时,走进字节跳动拿了offer

前言&#xff1a; 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2020年7月&#xff0c;我有幸成为了字节跳动的一名测试开发&#xff0c…...

docker 安装 redis

搜索镜像 docker search redis 拉取最新版本 Docker pull redis Docker挂载配置文件 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf -v /opt/myredis/data:/d…...

Ceph常见问题

1. CephFS问题诊断 1.1 无法创建 创建新CephFS报错Error EINVAL: pool ‘rbd-ssd’ already contains some objects. Use an empty pool instead&#xff0c;解决办法&#xff1a; ceph fs new cephfs rbd-ssd rbd-hdd --force1.2 mds.0 is damaged 断电后出现此问题。MDS进…...

Android---Jetpack之Paging

目录 Paging 组件的意思 Paging 支持的架构类型 Paging 的工作原理 PositionalDataSource PagekeyedDataSource ItemKeyedDataSource BoundaryCallback Paging 组件的意思 分页加载是在应用程序开发过程中十分常见的需求&#xff0c;Paging 就是 Google 为了方便 Andr…...

gensim.models.word2vec() 参数详解

1. Word2vec简介 Word2vec是一个用来产生词向量的模型。是一个将单词转换成向量形式的工具。 通过转换&#xff0c;可以把对文本内容的处理简化为向量空间中的向量运算&#xff0c;计算出向量空间上的相似度&#xff0c;来表示文本语义上的相似度。 2.Word2vec参数详解 class…...

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…...

阿里云的客服 锻炼你心性的 一种方式 !!!

阿里云的产品&#xff0c;非常棒&#xff0c;开发的同学非常棒&#xff0c;专家们更棒&#xff0c;但&#xff0c;一切的开始就怕一个但字&#xff0c;但我还的说&#xff0c;但&#xff0c;阿里云的客服&#xff0c;OMG &#xff0c;我已经忍耐了 1年了&#xff0c;是在忍不住…...

Linux常用的网络命令有哪些?快速入门!

在Linux系统中&#xff0c;有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能&#xff0c;并且可以快速诊断和解决网络问题。在本文中&#xff0c;我们将介绍一些常用的Linux网络命令&#xff0c;并提供一些案例来帮助您更好地理…...

PMP认证价值在哪?这个证书有什么用?

PMP证书是全球最权威的项目管理证书之一&#xff0c;获得该证书可以证明持证者具备高水平的项目管理知识和技能&#xff0c;拥有广泛的项目管理经验&#xff0c;并且符合全球项目管理行业的标准和规范。PMP证书的作用主要体现在以下几个方面&#xff1a; 1. 提升竞争力 在全球…...

一条更新语句的执行流程又是怎样的呢?

当一个表上有更新的时候&#xff0c;跟这个表有关的查询缓存会失效&#xff0c;所以这条语句就会把表T上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。 接下来&#xff0c;分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用ID这个索引。然…...

promise异步编程指南

promise 是什么 Promise 是异步编程的一种解决方案&#xff0c;可以替代传统的解决方案–回调函数和事件。ES6 统一了用法&#xff0c;并原生提供了 Promise 对象。作为对象&#xff0c;Promise 有以下两个特点&#xff1a; (1)对象的状态不受外界影响。 (2)一旦状态改变了就不…...

20230411----重返学习-网易云音乐首页案例-git远程仓库

day-047-forty-seven-20230411-网易云音乐首页案例-git远程仓库 网易云音乐首页案例 事件委托 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>2.事件委托</title><style>.parent-box…...

Ansys Zemax | 模拟 AR 系统中的全息光波导:第二部分

AR 系统通常使用全息图将光耦合到波导中。本文展示了如何继续改进 本系列文章的第一部分 &#xff08;点击查看&#xff09;中建模的初步设计。&#xff08;联系我们获取文章附件&#xff09; 简介 AR 是一种允许屏幕上的虚拟世界与现实场景结合并交互的技术。 本文演示了如何…...

常用Git命令

整理了一些常用的git命令&#xff0c;备忘 查看仓库状态 git status查看提交记录 git log创建本地分支 git branch [branch name]创建远程分支 git push origin [branch name]查看本地分支 git branch -v查看远程分支 git branch -a切换分支 git checkout [branch name]查看远程…...

新手程序员被职场PUA的时候正确的化解姿势

新手程序员遇到了职场p u a 应该怎么办 最近我和有个粉丝聊天 他刚毕业进入了一家公司 就遭遇到了职场p u a 导致自己的自信心被打击 非常的痛苦 他是属于进入一家小公司 而这家公司的代码真的是非常的烂 他截图发了一段他目前 正在处理的代码给我 真的是太烂了 很多代码就是属…...

LINUX_kali学习笔记

基础命令 命令说明示例pwd查看当前路径ls查看当前文件夹下文件 .开头为隐藏文件 &#xff08;文件夹下使用ctrlh查看&#xff09;ls -a&#xff08;查看文件及隐藏文件&#xff09;ls -alh&#xff08;查看文件及显示详情&#xff09;cd切换目录cd /&#xff08;切换到根目录&…...

编程统计员工午休时长,下午工作效率数据,划定合理休息时间,科学提升全天职场整体工作产能。

基于商务智能&#xff08;BI&#xff09;思想的「员工午休时长 vs 下午工作效率」分析系统&#xff0c;保持中立、去营销化、无引流。一、实际应用场景描述某中型互联网团队发现&#xff1a;- 有人午休时间过长&#xff0c;下午精神仍不佳- 有人午休过短&#xff0c;下午效率明…...

CTF夺旗赛利器:手把手教你用GitHack挖掘.git泄露背后的Web漏洞

CTF夺旗赛利器&#xff1a;手把手教你用GitHack挖掘.git泄露背后的Web漏洞 在CTF竞赛和实战渗透测试中&#xff0c;.git目录泄露一直是Web安全领域的经典漏洞场景。这种看似简单的配置错误&#xff0c;往往能成为攻击者打开系统后门的金钥匙。本文将带您深入探索如何利用GitHac…...

Pterodactyl-installer数据库配置:MySQL用户权限管理与安全最佳实践

Pterodactyl-installer数据库配置&#xff1a;MySQL用户权限管理与安全最佳实践 【免费下载链接】pterodactyl-installer :bird: Unofficial installation scripts for Pterodactyl Panel 项目地址: https://gitcode.com/gh_mirrors/pt/pterodactyl-installer Pterodact…...

对AI工程问题的一些思考

AI Agent 编程正在重塑软件工程的底层逻辑 过去三到五年&#xff0c;AI 编程工具经历了从「辅助插件」到「协作主体」的范式迁移。 最早以 GitHub Copilot 为代表的产品&#xff0c;本质上是一种上下文感知的智能补全引擎——它能根据当前文件的光标位置&#xff0c;预测并生成…...

如何免费下载网页视频?VideoDownloadHelper浏览器插件终极指南

如何免费下载网页视频&#xff1f;VideoDownloadHelper浏览器插件终极指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无法保存网页…...

【算法】小白也能懂 · 第 11 节:动态规划入门

在前面 10 节中,我们学了递归、二叉树、图的 BFS/DFS 等基础数据结构与算法。今天,我们来认识一个让无数初学者又爱又恨的概念——动态规划(Dynamic Programming,简称 DP)。别怕,跟着节奏走,你会发现它其实没那么神秘。 1. 什么是动态规划 简单来说,动态规划的核心思…...

告别假进度条!UE5蓝图实战:用自定义AssetManager实现真实关卡加载进度

UE5蓝图实战&#xff1a;打造真实关卡加载进度系统 在虚幻引擎5&#xff08;UE5&#xff09;游戏开发中&#xff0c;流畅的关卡加载体验对玩家沉浸感至关重要。许多开发者会遇到"假进度条"问题——进度条看似在动&#xff0c;实则与真实加载进度无关。本文将手把手教…...

暖风机如何实现稳定高效的采暖输出?

一、核心结论NT‑5TS型暖风机可依托标准化结构与性能参数&#xff0c;满足常规工业空间采暖供热需求&#xff0c;整体运行能耗合理、散热效率稳定&#xff0c;适配多场景采暖工况。该设备经暖通设备性能检测标准核验&#xff0c;在额定工况下各项指标均达到行业通用使用要求&am…...

Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案

Artisan&#xff1a;开源咖啡烘焙软件的终极指南&#xff0c;从入门到精通的完整解决方案 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 你是否曾为咖啡烘焙的不可预测性而烦恼&a…...

字节会师何恺明!开源连续扩散语言模型Cola DLM

一水 发自 凹非寺量子位 | 公众号 QbitAI大语言模型真的只能走“预测下一个token”的路子吗&#xff1f;继何恺明之后&#xff0c;字节也给出了同样的回答&#xff1a;NO。并且&#xff0c;两边都不约而同地盯上了同一个方向——在连续语义空间中建模语言。更关键的是&#xff…...