Java多线程编程

JAVA编程【多线程编程】 线程创建:可以通过继承 Thread 类或者实现 Runnable 接口来创建线程。线程同步:可以通过 synchronized 关键字或者 ReentrantLock 来确保线程安全。线程池:通过 ExecutorService 来管理线程池,提高性能。 阅读详情

进程:

正在运行的程序。代表着一个应用程序的内存空间。

在该空间中需要对该应用程序的代码进行执行控制。

每一个控制代码执行流程的单元称为线程


线程:

是进程中一个独立的控制单元,也称为执行路径,执行情景,一个进程中至少有一个线程

Jvw虚拟机在执行一个java程序时,至少启动了了两个线程;

一个是主线程,该线程执行的是main函数中的代码

另一个是垃圾回收线程,执行垃圾回收的代码;

多线程技术可以有多个执行路径,让多部分代码实现同时执行(单核的CPU,执行过程中其实是在做着快速的切换)


创建线程的方式:

一:继承Thread类

1  定义类继承Thread类,作为线程类的子类

2  定义线程要运行的代码,并将代码存储到Thread类的run方法中

(主线程要运行的代码定义在main函数中,自定义要运行的代码定义在run方法中)


3  调用线程类的start方法开启线程,并执行线程的run方法

运行时会发现结果每一次都有可能不一样。那是因为cpu在做着快速切换完成的,执行过程中,是按照cpu的特点执行,没有什么规则,所以,多线程运行时,有一个特性:随机性。线程有自己默认的名称Thread-编号,从0开始编号可以通过Thread类中的方法进行获取:

static Thread currentThread():返回当前线程对象。

String getName():获取线程对象的名称。

class Demo extends Thread{
	private String name;
	Demo(String name){
		this.name = name;
	}
	public void run(){
		for(int x=0; x<30; x++){
 	    		for(long y=-9999990; y<100000000; y++){}
			System.out.println(name+"。。。"+x+"...."+Thread.currentThread().getName());
		}
	}
}


class ThreadDemo {
	public static void main(String[] args) {
		Demo d1 = new Demo("one---");
		Demo d2 = new Demo("two");
		d1.start();
    		d2.start();
		for(int x=0; x<30; x++){
			System.out.println("hello main....."+x+"...."+Thread.currentThread().getName());
		}
	}
}

二 、实现Runnable接口

定义类实现Runnable接口

覆盖Runnable接口中的run方法,将多线程要运行的代码存放该run方法中

通过Thread类创建线程对象

将实现了Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。


为什么要将Runnable接口的子类对象作为参数传递呢?

是为了告诉多线程要运行的代码所属的对象。调用Thread类的start方法让线程启动并运行。


class Demo implements Runnable{
	private String name;
	Demo(String name){
		this.name = name;
	}
	public void run(){
		for(int x=0; x<30; x++){
       			for(long y=-9999990; y<100000000; y++){}
			System.out.println(name+"。。。"+x+"...."+Thread.currentThread().getName());
		}
	}
}


class ThreadDemo {
	public static void main(String[] args) {
		Demo d1 = new Demo("one---");
		Demo d2 = new Demo("two");
		Thread t1= new Thread(d1);
		Thread t2= new Thread(d2);
		t1.start();
   	  	t2.start();
		for(int x=0; x<30; x++){
			System.out.println("hello main....."+x+"...."+Thread.currentThread().getName());
		}
	}
}

继承Thread类和实现Runnable接口的区别:

实现Runnable接口可以避免单继承的局限性

所以,在创建线程是建议使用第二种方式

其实该接口在设计时,就是将线程要运行代码的位置进行抽取


线程安全问题产生的原因:

当多个线程对操作共性数据的多句代码分开执行导致的

要素: 共性数据、 多句操作共性数据的代码


解决该问题的原理:

保证多条操作共性数据的代码在同一时间段只有一个线程在执行,在执行期间,不允许其他线程参与

解决方式:Java提供了解决方案,就是同步机制。

代码体现:同步代码块。

Synchronized(任意对象){

//需要被同步封装的语句

}

同步好处:解决了多线程的安全问题


同步前提:

         1  必须要有两个或者两个以上的线程。

         2   多个线程必须使用同一个锁

如果加上同步问题没被解决就是前提出错


 同步弊端:

 降低运行效率,对资源是一种消耗。       

同步代码块是一个封装体,函数也是一个封装体,如果让函数具备了同步性,那么就没有必要定义同步代码块了。这个函数就称为同步函数。

同步函数锁使用的锁是this

同步函数和同步代码块的区别:

同步函数使用的锁是固定的this

同步代码块可以指定任意的对象作为锁

一般开发常用同步代码块

静态同步函数所使用的锁是:所属类的字节码文件对象,写法是类名.class

死锁:在同步嵌套的时候,容易出现死锁

            要尽量避免死锁。

Java多线程编程详解 本文系统介绍了Java多线程编程的核心内容,包括线程创建方式(继承Thread类、实现Runnable/Callable接口、线程池)、生命周期管理、同步机制(synchronized、Lock、volatile、原子类)以及常用并发工具类(CountDownLatch、CyclicBarrier、Semaphore)。通过代码示例展示了各种多线程技术的实际应用,帮助开发者理解并发编程的关键概念和技术实现。文章涵盖从基础到进阶的多线程知识,为Java开发者提供了全面的并发编程指导。 阅读详情

相关推荐

win10任务栏文件夹设置成竖形列表样式

win10任务栏文件夹设置成竖形列表样式

ftzchina的博客 7081

JAVA多线程编程

JAVA的背景和历史JAVA的特点和应用领域如何安装和配置JAVA开发环境。

Kali与编程 1018

Android 15网络子系统深度解析(一):ConnectivityService与网络管理框架全解析

深入剖析Android 15核心网络服务ConnectivityService的架构设计、NetworkAgent/Factory机制、网络状态管理、以及WiFi/移动网络切换的完整流程

Cheson的专栏 1749

java多线程编程

多线程简介 对多线程的理解 1. 多任务与多线程    多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 2. 多线程例子(生活,游戏,编程) 边吃饭边玩手机,边听歌边写作业 开黑打游戏 等等 3. 进程,程序,线程的理解 进程: 是程序的一次执行,是动态的,一个进程至少包含一个线程,一个线程不能独立存在,它必须是进程的一部分;一个进程一直运行,直到所有非守护线程都结束运行后才能结束。 程序是代码段,是静态的。 一条线程指的是进程中一个单一顺序的控制流,一

qq_44045519的博客 1296

3-RRR并联机器人结构详解:从运动学到奇异点分析(附MATLAB仿真代码)

本文详细解析了3-RRR并联机器人的结构设计、运动学建模及奇异点分析,并提供了MATLAB仿真代码。通过对称性设计和可分析性,3-RRR结构成为教学与研究的理想对象。文章从基础杆件参数设置到奇异位形的实时捕捉,深入探讨了机构运动的数学本质,并分享了仿真调试中的实用技巧,助力工业自动化和精密控制应用。

sunny的博客 367

YOLO11实战 第056期-基于yolo11的无人机航拍铁路障碍物检测实战-数据集&源码&系统

召回率曲线帮助评估模型在目标检测任务中,检测到真正目标的能力。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。这条曲线显示了随着置信度的增加,每个类别的召回率先变化较小,然后在某个点之后迅速下降。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 158

多线程编程java_Java中的 多线程编程

Java 中的多线程编程一、多线程的优缺点多线程的优点:1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快多线程的代价:1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。2)上下文切换的开销当CPU从执行一个线...

weixin_35745051的博客 100

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

前程算法屋的博客 626

Java 多线程编程

Java多线程编程是Java并发编程的核心,通过创建线程实现多任务并发执行。主要方式包括继承Thread类和实现Runnable接口,线程具有新建、就绪、运行、阻塞和死亡五种状态。关键同步机制有synchronized关键字和Lock接口,用于解决线程安全问题。线程间通信通过wait()、notify()等方法实现协作。线程池(如FixedThreadPool、CachedThreadPool)可复用线程提高效率。开发中需注意线程安全、死锁避免等问题,建议优先使用线程池管理线程资源。

Mr_Zhen的博客 1363

基于江协科技STM32创建HAL库工程模板

基于江协科技STM32入门教程创建的HAL库工程模板

2401_82728381的博客 1135

ISO13849功能安全从入门到精通(3):安全功能及其对降低风险的贡献4

例如,如果机器必须在有限速度下运行时进行设置,那么在低加速度值下进行设置时,参数P1将是正确的选择:随着危险缓慢出现并给予足够的运动自由,操作员将能够移出危险区域。例如,在无故障的条件下,在操作者的手的方向移动的滚子不能陷住它。在所有其他情况下,F1是正确的选择,前提是危险暴露的持续时间不超过机器总操作时间的1/20。需求来源于必要的风险降低。由于这些考虑而降低的PLr在任何情况下都不得低于通过比较方式考虑的机器的PLr,因为并不能从事故发生率低和严重程度低得出实施的安全功能提供的安全水平高于要求。

wdconan001的博客 837

【Java 基础篇】Java多线程编程详解

本文详细介绍了Java多线程编程的概念、原理和常用技术。多线程编程可以提高程序的性能和响应能力,但也需要注意线程安全和线程同步的问题。在实际开发中,合理地使用多线程可以充分发挥多核处理器的优势,提高程序的并发能力和执行效率。同时,需要注意避免多线程之间的竞争条件和数据一致性问题,保证线程的安全性和正确性。希望本文对你理解和应用Java多线程编程有所帮助!

繁依Fanyi的博客 3112

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4342

多线程编程java_java多线程编程

在Java的 JDK 开发包中,已经自带了对多线程技术的支持,可以方便地进行多线程编程。Java 实现多线程编程的方式主要有三种:(1)通过实现 Runnable 接口;(2)通过继承 Thread 类;(3)通过 Callable 和 Future 创建线程。下面详细介绍下这三种具体实现方式。通过实现 Runnable 接口来创建线程创建线程的一种方法是,创建一个实现 Runnable 接口...

weixin_39730284的博客 162

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java多线程编程是什么,Java多线程编程的核心是什么?

Java多线程编程的核心是什么?其实在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应该能够编写简单的多线程程序。为什么会排队等待?下面的这个简单的 Java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因...

weixin_34511324的博客 122

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java多线程编程有什么用_java多线程编程的作用都有哪些

我们在上文中给大家简单介绍了java多线程编程中线程与进程的基本概念和线程生命周期等技术知识,而今天我们就再来了解一下,java多线程编程的作用都有哪些。1.充分利用CPU资源现在世界上大多数计算机只有一块CPU。因此,充分利用CPU资源显得尤为重要。当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空闲状态。这将造成大量的计算资源的浪费。而在程序中使用多线程可以在某一个线程处于休眠或阻塞时...

weixin_42502040的博客 751

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

多线程Java Socket编程示例

多线程Java Socket编程示例 http://www.blogjava.net/sterning/archive/2007/10/15/152940.htmlPosted on 2007-10-15 12:37 诗特林 阅读(804) 评论(0)  编辑  收藏 所属分类: Java <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1

GOBY 栏目 4122

【线程】Java多线程编程

本文详细介绍了Java中创建线程的多种方式,介绍了线程的构造方法和重要属性。

telasi2004的博客 1056

java多线程编程_java多线程编程

所谓的多线程编程本质上是并发编程,并发编程的本质是指发挥出所有硬件的最大性能。    Java 是为数不多的真正支持有多线程并发编程的开发语言。所以Java 在整体的处理性能上是最高的。如果要了解线程的性能问题,那么首先要先解决的就是清楚什么叫做进程?从计算机发展的历史来讲,传统的硬件只有一个 CPU(单核心的CPU),于是为了发挥出硬件的全部性能,引入了多进程的编程模式。多进程是指在没有扩展原始...

weixin_31600859的博客 171

java 多线程编程_java多线程编程

一、多线程的优缺点多线程的优点:1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快多线程的代价:1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。2)上下文切换的开销当CPU从执行一个线程切换到执行另外一个线程...

weixin_42302142的博客 100
上一篇: Java 字节流InputStream、OutputStream、FileInputStream、FileOutputStream
下一篇: Java 集合 List、Set、Map的特性、区别、用法
梦中的梦
博客等级 码龄18年 16粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值