Java多线程相关(1) 线程

ConvLSTM时空预测实战代码详解 ConvLSTM代码复现 阅读详情

线程与进程的概念

1.进程

进程是操作系统的基础,是程序的一次执行。进程是系统进行资源分配和调度的独立单位,一个进程由多个线程组成。

2.线程
线程是操作进行调度的最小单位,包含在进程中,线程是进程的子任务。一个进程运行则至少由一个线程正在运行。

线程创建

Java中线程创建由两种方式,一种是继承Thread类,一种是实现Runnable接口。

1.继承Thread接口
在这里插入图片描述

2.实现Runnable接口
在这里插入图片描述
实际上Thread内也实现了Runnable接口,且Thread也有接收Runnable对象的构造方法,可用Thread thread = new Thread(Runnable run)。
在这里插入图片描述
线程执行start()不代表启动的状态,仅代表线程处于可运行状态。

3.Callable和Future实现

Callable接口有call()方法,类似run(),但call()可以抛出异常且可以有返回值。
call()方法作为线程的执行体,用FutureTask类包装Callable对象。
具体如下:

FutureTask task = new FutureTask<Integer>((Callable<Integer>)()->{
int i = 0;
return i;
});

new Thread(task,"callable创建的线程").start();

4.创建线程的三种方式比较

采用Runnable,Callable方式的优缺点
优点: 只是实现接口,可以继承其他类和接口 。 多个线程可以共享一个目标对象,适用于将多个相同线程处理同一资源的应用场景。
缺点:编码相对复杂,需用Thread.currentThread()获得当前线程
采用继承Thread的方式
优点:编程简单,可以使用this直接调用当前线程。
缺点:不能继承其他类
推荐使用Runnble接口实现线程。

5.线程的生命周期

线程有五种状态: 创建,就绪,运行,阻塞,死亡
状态说明:

  1. 新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。
  2. 就绪状态(Runnable): 即“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。
  3. 运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
  4. 阻塞状态(Blocked) : 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    (01) 等待阻塞 – 通过调用线程的wait()方法,让线程等待某工作的完成。
    (02) 同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
    (03) 其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
  5. 死亡状态(Dead) : 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
    线程状态转换
    在这里插入图片描述

线程数据共享与否

线程拥有共享与非共享数据,如个人账户余额,购票。。
使用共享数据时,需注意线程安全问题。
如在抢票时,在某一时刻只允许一个线程修改剩余票数数量。

28、沉浸式体验技术:概念、类型与应用 本文全面介绍了沉浸式体验技术的概念、类型与应用。从双边滤波器的图像处理原理切入,系统阐述了VR、AR、MR、ER及数字孪生等核心技术的特点与区别,并通过丰富案例展示了其在商业、医疗、教育、旅游、房地产、物流等多个领域的实际应用。文章还分析了技术融合趋势、硬件升级方向、应用场景拓展潜力,同时探讨了数据处理、网络延迟、隐私安全等挑战及应对策略,最后以流程图和对比表格总结技术发展脉络,展望沉浸式技术推动社会进步的广阔前景。 阅读详情

相关推荐

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

java:编写10个线程,第一个线程从1加到10,第二个线程从11加到20……第十个线程从91加到100, 最后再,10个线程结果相加

在生活中,人体可以同时进行各项生命活动。例如,人体可以同时进行呼吸、血液循环等等… 当我们在编写程序时,这些行为我们可以抽象为并发,而将并发完成的每一件事称为线程。 线程创建的两种传统方式 方式一:继承Thread类 1.创建Thread类的子类 2.重写Thread类的run()方法,将当前线程要执行的操作声明在run()方法内! 3.实例化Thread类的子类 4通过Thread类的子类对对象...

popping_w的博客 1万+

【电子元件篇】MOSFET场效应管作用、选型和测量指南-超简单解读

场效应管是一种电压控制型半导体器件,相比三极管具有输入阻抗高、噪声小、功耗低等优势。主要分为结型和绝缘栅型两大类,后者又可分为耗尽型和增强型MOS管。场效应管通过栅极电压控制漏极电流,具有转移特性和输出特性两大静态特性,以及快速的开关特性。其关键参数包括饱和漏源电流、夹断电压、跨导等,应用场景涵盖信号放大、恒流源、阻抗变换等领域。使用时需根据电路需求选择合适类型,如结型管适合一般放大,功率MOSFET适合高压大电流场合。检测时可用万用表电阻档初步判断好坏和放大能力。

2301_81299416的博客 2540

编写10个线程,第一个线程从1加到10,第二个线程从11加到20 ..第十个线程从91加到100

不用syn关键字修饰 class ThreadTest extends Thread { int number; public ThreadTest(int n) { number=n; } @Override public void run() { int count=0; for(int i=0;i<10;i++) { count+=number+i; }

爱写bug的王六六 2271

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2795

4 种方法识别Linux系统 USB 设备

导读 如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。 查询USB设备 Linux 系统使用 /dev 目录下特定的设备文件来标识插入的

郑帅的博客 1986

编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100, 最后再把10个线程结果相加。

编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100, 最后再把10个线程结果相加。

qq_33343480的博客 1万+

保姆级教程:手把手教你用Jacquard V2数据集训练机器人抓取模型(附完整代码)

本文提供了一份详细的保姆级教程,手把手教你使用Jacquard V2数据集训练机器人抓取模型。从环境配置、数据准备到模型架构设计、训练优化和实际部署,全程解析并附完整代码,帮助开发者快速掌握视觉抓取技术。

weixin_29031057的博客 314

编写10个线程,第一个线程从1加到10,第二个线程从11加到20...第十个线程从91加到100,最后再把十个线程结果相加。

编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100,最后再把十个线程结果相加。 public class AccountTest { public static void main(String[] args) { Thread[] ts = new Thread[10]; for (int i = 0; i < 10; i++) { ...

weixin_43516800的博客 1909

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2497

HTML爱心字母雨(完整代码)

HTML语言实现爱心字母雨的完整代码。

AIGC 2万+

快速掌握多线程的相关知识1Java

多线程的概念意义,线程同步,同步锁,线程的6种状态,Java

UP青年 256

风机叶片小规模振动监测数据集--读取测试

ETH风电叶片缺陷数据集–读取测试 数据简介 提示:这里可以添加本文要记录的大概内容: 结构健康监测是保障重要机电设备、建筑设施健康的重要技术手段。 一、lvm_read包安装 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务

cnjs1994的博客 2850

Java多线程相关知识【1】--新建线程

文章目录Java多线程相关知识【1】--新建线程一、extend (继承Thread类)二、implements (实现Runnable接口) Java多线程相关知识【1】–新建线程 菜鸟的一个学习笔记,大神请绕路。 一、extend (继承Thread类) 新建一个thread,并重写其中的run方法 public class ExtendThread extends Thread { ...

努力的小白X 306

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java多线程相关知识1

进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至。进程在运行过程中,需要拥有独立的内存单元,否则如果申请不到,就会挂起。而多个线程能共享内存资源,这样就能降低运行的门槛,从而效率更高。调度和分派的基本单位,在实际开发过程中,一般是考虑多线程并。共有四种方式可以创建线程,分别是:继承。并行:多个任务在计算机中同时执行。并发:多个任务在计算机中交替执行。并行和并发有什么区别?一个进程一般有多个线程。接口、线程池创建线程。

pch2000的博客 356

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java20多线程1:多线程相关概念和创建方式、Thread类的常用方法

多线程相关概念、同步(同步代码块、同步方法)、死锁、JDK5.0新特性:Lock(锁)

Bruce的博客 1652

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java多线程-1-线程的创建及相关知识

文章目录1 相关概念1.1 并行、并发1.2 程序、进程、线程1.3 进程的五种状态及其转换2 线程2.1 线程创建的两种方式1 继承Thread类2 实现Runnable接口2.2 线程的常用方法及线程优先级2.3 两种创建线程方式的比较 1 相关概念 1.1 并行、并发 并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生,并发性是指两个或多个事件在同一时间间隔内发生。 在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器系统中每个时刻却仅能有一道

记录学习点滴 228

Java-多线程第一篇多线程相关认识(1)

1、单线程进程 如果程序执行某行代码时遇到了阻塞,则程序将会停滞在该处。 2、进程代表着一个程序,程序是静态的,进程是动态的程序。 进程是系统进行资源分配和调度的一个独立单位。关于进程有如下3个特征: 1》独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。进程之间不能随意访问。 2》动...

weixin_30516243的博客 80

java 多线程编程系列之1----线程、进程的相关概念

线程之间的切换也是消耗时间的,所以线程数的设定也是有讲究的;因为线程在运行的时候数据从cpu里的载入和载出是要花费大量的时间(相对cpu的计算时间来说这是大量的时间,因为cpu的计算非常快),所以在一个线程的数据载入载出的时候就可以切换到其他线程来执行,这就提供了效率;假如只有一个核心的cpu,并且一个线程的执行期间有50%的时间是计算,50%的时间是等待网络上的数据,这时你想充分利用cpu的资源你就可以设定2个线程,一个线程等待的时候另外一个线程就可以计算;c:线程的计算时间,比如上面的列子就是1/1。

u010953747的博客 316

Java 多线程相关知识 《java core 1》读书笔记

1.线程基本知识: 线程的声明周期中的6个状态: (1)NEW 被创建 至今尚未启动的线程处于这种状态。 (2)RUNNABLE 可运行 正在 Java虚拟机中执行的线程处于这种状态。处于可运行状态的某一线程正在 Java虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。 (3)BLOCKED 被阻塞 受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一

mantantan的博客 555

面试专题:java 多线程(1)----synchronized关键字相关问答

所以如果一个线程A调用一个实 例对象的非静态 synchronized 方法,而线程B需要调用这个实例对象所属类的静态 synchronized 方法,是允许的,不会发生互斥现象,因为访问静态 synchronized 方法占用的锁是当前类的锁,而访问非静态synchronized 方法占用的锁是当前实例对象锁。比如一个线程获得了某个对象的锁,此时 这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死 锁。5.线程池解决什么问题的;

weixin_39209728的博客 898

Java核心技术 卷1 多线程----线程的相关概念(1)

<1>什么是线程   一个程序同时执行多个任务,每个任务称为一个线程(thread),它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(nultithreaded)。 <2>多进程与多线程有哪些区别   本质的区别在于每个进程拥有自己的一整套变量,而线程共享数据。共享变量使线程之间的通信比进程之间的通信更有效、更容易。 Thread方法 voi...

weixin_30345055的博客 127

非零基础自学Java (老师:韩顺平) 第17章 多线程基础 17.1 线程相关概念

非零基础自学Java (老师:韩顺平) 第17章 多线程基础 17.1 线程相关概念

代码改变世界 348

Java多线程之间实现通讯

一、课程目标 多线程之间如何通讯 wait、notify、notifyAll()方法 lock 停止线程 守护线程 Join方法 优先级 Yield 二、多线程之间如何实现通讯 2.1 什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 画图演示 2.2 多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一...

kai46385076的专栏 1845

java 100个线程_在java中使用10个线程打印1到100

我是多线程的新手,我得到了一个问题,使用Java中的10个线程以低于约束打印1到100.>线程t1应打印:1,11,21,31,… 91t2应打印:2,12,22,32,… 92同样t10应打印:10,20,30,… 100>最终的输出应该是1 2 3 .. 100我试过了,但它在所有10个线程中抛出以下异常:java.lang.IllegalMonitorStateException...

weixin_29115107的博客 590

java 线程简介_Java多线程概念简介 多线程中篇(一)

Java的线程与操作系统的线程在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合。(这只是一种简要的分类)Java线程在JDK1.2之前,是用户线程实现的而在JDK1.2中,线程模型变为基于操作系统原生线程模型来实现的所以说Java虚拟机中线程的映射实现,是受制于操作系统的,操作系统支持怎样的线程模型,决定了Java虚拟机中线程的样子。虚拟机规范中也并未限定Java线程...

weixin_33724434的博客 165
上一篇: EmptyList和Arrays$ArrayLit使用介绍
下一篇: Flume源码阅读记录(1)flume介绍
SW_LCC
博客等级 码龄11年 4粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值