并发编程2.0

9.创建线程有哪几种方式?

  • 继承Thread类,通过重写run方法来定义线程的执行逻辑
class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程执行的代码");}
}
public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}
}
  • 实现Runnable接口来定义线程任务,将该任务传递给Thread类的构造函数来创建线程;

优点:这种方式更符合面向对象的设计原则,将任务和执行任务的线程分开,可以多个线程共享一个Runnable对象,更方便的对共享资源进行操作。

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("通过实现Runnable接口创建的线程执行的代码");}
}
public class Main {public static void main(String[] args) {MyRunnable runnable = new MyRunnable();Thread thread = new Thread(runnable);thread.start();}
}
  • 实现Callable接口
  • 使用Executors工具类创建线程池;优点:线程池可以控制并发线程的数量,防止因为创建过多线程导致资源耗尽,还可以对线程进行同意的管理和调度。

10.线程的run()和start()有什么区别?

run()方法时线程的执行体,包含了线程执行的代码逻辑,但run方法时空方法,需要进行重写;

start()方法是用于启动一个新线程的方法,当调用start时,jvm会创建一个新线程,并在这个新线程中调用run方法来执行线程任务;

11.线程的生命周期和七种状态

  1. 新建状态(new):当使用new创建了一个线程对象后,线程就处于新建状态;此状态下线程仅仅是一个对象,尚未开始执行,没有分配cpu资源,也没有执行run方法的代码。
  2. 就绪状态(Runnable):当线程对象调用start方法后,线程就进入就绪状态;此状态下,线程已经准备好运行,等待cpu时间片的分配。
  3. 运行状态(Running):当就绪状态的线程获得CPU时间片后,就会进入运行状态,执行run方法的代码;运行状态的线程会独占cpu资源,直到时间片完成或者其他原因而暂停执行。
  4. 阻塞状态(Blocked):当线程因为某些原因而无法继续执行暂停运行时,就会进入阻塞状态,比如等待获取锁;这状态的线程不会占用cpu资源。
  5. 等待状态(Waiting):线程进入等待状态是因为调用了一些特定的方法,比如wait方法,jojn方法等,需要其他线程进行相应唤醒操作;
  6. 超时等待状态(Timed Waiting):跟等待状态类似,但线程会等待一段时间后被自动唤醒;
  7. 终止状态(Terminated):当线程的run方法执行完毕或者线程因为异常而退出时,线程就进入终止状态;此状态线程已经结束了它的生命周期,不会再被调度执行,占用的资源也会被系统回收。

12.sleep()和wait()有什么区别?

  • 所属类:sleep时Thread类的静态方法,可以直接通过Thread类调用,而不用通过线程对象调用;wait是Object类的方法,意味着任何对象都可以调用。但是必须在同步块或者同步方法中调用。
    • 对线程的影响:sleep被调用后,线程进入超时等待状态,在睡眠时间内,线程不会占用cpu资源,但仍持有对象的锁;调用wait方法后,线程进入等待状态,会释放对象的锁
    • 唤醒方式:sleep方法会在线程睡眠时间结束后自动唤醒,重新进入就绪状态,等待cpu资源的分配;调用wait方法的线程,线程必须通过其他线程调用同一个对象的notify或者notifyall方法来唤醒。
    • 适用场景:sleep()方法主要是让线程暂停一段时间,实现简单的延时功能;wait()方法通常用于线程间的通信和协作,当一个线程需要等待某个条件满足时使用。

13. 如何停止一个正在运行的线程?

  1. 使用标志位:在共享变量中设置一个标志位,线程执行过程中定期检查这个标志位,需要停止线程时,将标志位设置停止状态。
  2. 使用interrupt()方法:这个方法时Thread类提供的一个方法,用于中断线程,但是不能直接停止线程的执行,而是发送一个中断信号,需要一些其他机制配合使用。比如会出现阻塞的方法调用中会抛出异常来中断,对于没有阻塞的线程,需要在代码中手动检查isInterrupted()标志来决定是否中断线程。
  3. stop方法:会直接停止线程的执行,可能导致共享资源没有被正确释放。

14.synchronized 的作用?

synchronized 关键字是用来控制线程同步的,在多线程环境下,控制synchronized 的代码段不会被多个线程同时执行。

  1. 互斥性(保证原子操作):用于实现线程之间的互斥访问
  2. 可见性:在多线程的环境下,由于每个线程都有自己的工作内存,共享变量在多个线程的工作内存中的副本可能不一致,它在释放锁之前,还会对共享变量修改并立即刷新到主内存中,获取锁的线程会从主内存中重新读取共享变量的最新值。
  3. 可重入性:它是可重入锁,意味着一个线程获取了一个对象的锁,可以再次获取同一个对象的锁而不会导致死锁。

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

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

相关文章

一个比较舒服的 prettier 前端配置 vue js

1. 安装 prettier 库 npm i -D prettier2. 配置 package.json "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,vue,scss,css}\""3. 根目录下放这两个文件 .prettierrc {"semi": true,"singleQuote": true,&quo…

VTK中对于相机camera的设置

1. 相机的核心属性 在 VTK 中,vtkCamera 的核心属性有默认值。如果你不设置这些属性,相机会使用默认值来渲染场景。 Position(默认值:(0, 0, 1)): 默认情况下,相机位于 Z 轴正方向的 (0, 0, 1)…

学习日志017--python的几种排序算法

冒泡排序 def bubble_sort(alist):i 0while i<len(alist):j0while j<len(alist)-1:if alist[j]>alist[j1]:alist[j],alist[j1] alist[j1],alist[j]j1i1l [2,4,6,8,0,1,3,5,7,9] bubble_sort(l) print(l) 选择排序 def select_sort(alist):i 0while i<len(al…

活着就好20241128

早晨问候&#xff1a; 亲爱的朋友们&#xff0c;大家早上好&#xff01;今天是2024年11月28日&#xff0c;第48周的第四天&#xff0c;也是十一月的第二十八天&#xff0c;农历甲辰[龙]年十月廿四。在这个即将步入月末、阳光依旧明媚的清晨&#xff0c;愿第一缕阳光轻轻洒落在…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

3D Gaussian Splatting综述 论文笔记

文章目录 参考资料 参考资料 A Survey on 3D Gaussian Splatting精读 3DGaussianSplatting技术的影响会有多大&#xff1f; - Kedreamix的回答 - 知乎 https://www.zhihu.com/question/626506306/answer/3375816824 3DGS综述《A Survey on 3D Gaussian Splatting》 【论文笔记…

@Pattern (用于校验字符串是否符合特定正则表达式)

Pattern 是一个用于校验字符串是否符合特定正则表达式的注解&#xff0c;它在 Java 中常用于验证输入数据的格式。以下是 Pattern 注解的详解和使用方法&#xff1a; 含义 Pattern 注解用于在 Java 中对字段进行注解&#xff0c;以确保其值与指定的正则表达式匹配。这个注解可…

mac 如何查看 export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 是否正确

在 macOS 上&#xff0c;如果你想查看环境变量 NVM_NODEJS_ORG_MIRROR 是否已正确设置为 https://npm.taobao.org/mirrors/node&#xff0c;你可以按照以下步骤进行检查&#xff1a; 1. 检查当前环境变量值 打开终端并运行以下命令来查看 NVM_NODEJS_ORG_MIRROR 环境变量的当…

探索人工智能:从Python到深度学习的进阶之旅

在当今这个数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的热门话题。对于有志于进入这一领域的学习者来说&#xff0c;制定一个系统的学习计划至关重要。本文将为您规划一条从Python编程基础出发&#xff0c;逐步深入到人工智能核心领域的学…

红黑树的概念以及基本模拟

目录 一、概念和规则&#xff1a; 1、思考为什么最长路径不超过最短路径的二倍&#xff1f; 2、红黑树的效率&#xff1f; 二、红黑树的代码实现 1、红黑树的节点结构 2、红黑树的插入 1、大致过程&#xff1a; 2、维护的三种情况&#xff1a; 1、情况一&#xff1a;变…

IP反向追踪技术,了解一下?

DOSS&#xff08;拒绝服务&#xff09;攻击是现在比较常见的网络攻击手段。想象一下&#xff0c;有某个恶意分子想要搞垮某个网站&#xff0c;他就会使用DOSS攻击。这种攻击常常使用的方式是IP欺骗。他会伪装成正常的IP地址&#xff0c;让网络服务器以为有很多平常的请求&#…

二十五:如何“合法”地跨域访问?

跨域访问&#xff08;Cross-Origin Resource Sharing&#xff0c;简称CORS&#xff09;是现代Web开发中常见的一种技术需求。由于浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;不同域名、协议或端口之间的资源无法直接交互&#xff0c;这对前端开发…

计算机网络的功能

目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络&#xff0c;用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…

NUMA架构及在极速网络IO场景下的优化实践

NUMA技术原理 NUMA架构概述 随着多核CPU的普及&#xff0c;传统的对称多处理器&#xff08;SMP&#xff09;架构逐渐暴露出性能瓶颈。为了应对这一问题&#xff0c;非一致性内存访问&#xff08;NUMA, Non-Uniform Memory Access&#xff09;架构应运而生。NUMA架构是一种内存…

论文笔记(五十七)Diffusion Model Predictive Control

Diffusion Model Predictive Control 文章概括摘要1. Introduction2. Related work3. 方法3.1 模型预测控制3.2. 模型学习3.3. 规划&#xff08;Planning&#xff09;3.4. 适应 4. 实验&#xff08;Experiments&#xff09;4.1. 对于固定奖励&#xff0c;D-MPC 可与其他离线 RL…

Android 13 Aosp Settings Android Studio版本

Android 13 Aosp Settings Android Studio版本 Settings相关源码 Settings https://android.googlesource.com/platform/packages/apps/Settings/+/refs/heads/android13-release SettingsIntelligence https://android.googlesource.com/platform/packages/apps/SettingsIn…

oracle 创建只可以查询权限用户+sqldeveloper如何看到对应表

声明 申明部分是从其他csdn用户哪里复制的&#xff0c;只是自己操作后发现无法达到我最后的预期&#xff0c;所以关闭忘记是看的那篇了&#xff0c;如果有侵权请见谅&#xff0c;联系我删除谢谢。 好了&#xff0c;故事的开始是我最近删投产表了。没错职业黑点&#xff0c;清…

比特币libsecp256k1中safegcd算法形式化验证完成

1. 引言 比特币和其他链&#xff08;如 Liquid&#xff09;的安全性取决于 ECDSA 和 Schnorr 签名等数字签名算法的使用。Bitcoin Core 和 Liquid 都使用名为 libsecp256k1 的 C 库来提供这些数字签名算法&#xff0c;该库以其所运行的椭圆曲线命名。这些算法利用一种称为modu…

软件测试丨Pytest生命周期与数据驱动

Pytest的生命周期概述 Pytest 是一个强大的测试框架&#xff0c;提供了丰富的特性来简化测试执行。它的生命周期包括多个阶段&#xff0c;涉及从准备测试、执行测试到报告结果的完整流程。因此&#xff0c;理解Pytest的生命周期将帮助我们更好地设计和管理测试用例。 开始阶段…