Java并发(多线程)学习总结

1、程序

在结构上,程序是数据结构加算法再加上相应代码构成的,但是在计算机中程序是以文件形式保存在磁盘等存储器中,说白了就是01串,尚未启动的程序就是个文件,和视频音频文件没有多少区别。

比如电脑中的一个单机游戏(解压直接运行)


 整个文件夹内的内容就是一个程序

 

2、进程

进程是指执行中的程序,计算机中每个进程由操作系统分配相应的系统资源执行,进程是系统资源分配的基本单位

我在写这篇博客的时候是边听音乐边打字,我听音乐用的播放器“多米音乐”此时在运行,这就是一个进程


可以看到同一个程序在运行的时候会产生一个或多个进程,进程间通信是通过共享内存与消息传递两种方式实现,这个在操作系统课程中学习到。

 

3、线程

进程是由一个或多个线程组成的,线程是CPU分配的基本单位,每个线程执行时相互独立

打个比方:多米音乐播放器在运行的时候播放音乐是一个进程,而在播放音乐的同时我想向播放器添加一首我很喜欢的本地的一首歌,此时我就可以执行相应的操作,把本地的那首歌添加到播放器队列中,那么播放音乐的线程与添加音乐到播放器列表就是不同的两个线程,而它们在执行时又不互相干扰,一个进程的子线程是共享该进程的全局变量的,每个线程在创建的时候会在进程的堆栈段中分配资源给各个线程。

 

4、顺序编程与并发编程

下面看一个顺序编程的例子:

public static void main(String[] args) {
	for(int i=0; i<10; i++) {
		print(i);
	}
}
public static void print(int i) {
	System.out.println("第" + (i + 1) + "个数字");
}

 结果:

第1个数字

第2个数字

第3个数字

第4个数字

第5个数字

第6个数字

第7个数字

第8个数字

第9个数字

第10个数字

程序运行分析:程序在运行的时候JVM会启动该程序的一个进程,这个进程就是整个程序的父进程,父进程找到main方法,创建一个线程开始执行main中的代码,当执行到for循环时每次循环父线程会执行相应的方法,然后再再执行后续代码,在这个过程中,如果在执行到第5次循环的时候有一个I/O要求,那么在I/O请求没有完成之前,整个循环就会停在第5次循环那里一直等待,也就是顺序编程会造成“阻塞”

下面看一个并发编程的例子:

public class Threadddd implements Runnable {
	private static int count;
	public static void main(String[] args) {
		for(int i=0; i<10; i++) {
			Runnable t = new Threadddd();
			Thread thread = new Thread(t);
			thread.start();
		}
		System.out.println("父线程结束");
	}
	public void run() {
		System.out.println("第" + (++count) + "个数字");
	}
}

 

 程序输出结果:

第2个数字

第4个数字

第1个数字

第6个数字

第3个数字

第7个数字

第5个数字

父线程结束

第9个数字

第8个数字

第10个数字

再运行一次,程序输出结果:

第2个数字

第5个数字

第4个数字

第6个数字

第7个数字

第3个数字

第1个数字

第8个数字

父线程结束

第9个数字

第10个数字

程序运行分析:每次执行循环时父进程都会创建一个新的子线程并启动子线程,而子线程何时执行跟父线程毫无关系,父线程是指父进程在main开始时创建的线程,从结果可以看到子进程是各自独立完成的,当整个进程中的所有线程全部执行完以后整个进程结束。

 

5、多线程实现:

方式一:实现Runnable接口,重写Runnable接口中唯一的方法run()方法,但是线程在执行时要利用Thread的start来启动,实现方式同上面多线程的例子

方式二:继承Thread类并重写Thread类中的run()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的有限差分法实验报告用MATLAB中的有限差分法计算槽内电位;对比解析法和数值法的异同点;选取一点,绘制收敛曲线;总的三维电位图+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值