JavaSE_day43(多线程单线程区别,图解main方法若是单多线程该如何执行,如何使用多线程2种方式)

news2024/11/28 0:59:07

1 A.java

 * 学习多线程之前,我们先要了解几个关于多线程有关的概念。
    
    A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
    
    B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
    
    C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
    
    什么是多线程呢?即就是一个程序中有多个线程在同时执行。(同一时间做多件事情,安全性低,效率高)

* 多线程的实现方式:
 *         方式1:

 *             一种方法是将类声明为 Thread 的子类。
 *             该子类应重写 Thread 类的 run 方法。
 *             接下来可以分配/创建并启动该子类的实例
 * 
 * Thread
 *         String getName()      返回该线程的名称。 
 * 
 *         void   setName(String name) 改变线程名称,使之与参数 name 相同。
 * 
 * 现在使用了多线程,所以输出是切换性的,不会按顺序执行,先是张三执行完,再次依次往后执行...
 * 
 * CPU执行程序的随机性,多个程序进行高速切换,所以并不不会感觉有卡顿现象!
    
    
    右键选择,Source,选择Override选择需要重写的方法

定义多线程类:

public class A_MyThread extends Thread {

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println(getName() + ":" + i);
		}
	}
}

定义主类:

public class A_ThreadMain {
	public static void main(String[] args) {
		
		//创建线程实例
		A_MyThread mt = new A_MyThread();
		//修改线程名字
		mt.setName("张三");  //不改名字就是默认是从Thread-0,Thread-1...开始
		
		//启动线程
		mt.start();
		
		//创建线程实例
		A_MyThread mt2 = new A_MyThread();
		mt2.setName("老王");
		
		//启动线程
		mt2.start();
	}
}

2 B.java

 * 主方法中的代码(方法)执行是多线程吗?
 *         图解:

 

 


 *         主方法的(方法)执行是单线程!

3 C.java

 * 多线程的实现方式:
 *         方式2:

 *     创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
    
    为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
    
    查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。

 *     1、定义类实现Runnable接口。
    2、覆盖接口中的run方法。。
    3、创建Thread类的对象
    4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
    5、调用Thread类的start方法开启线程。

    由于java是单继承,所以再搞一个接口出来实现多线程是非常有意义的!

定义多线程类

public class B_MyThread implements Runnable {
	int num;
	
	public B_MyThread() {
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			Thread t = Thread.currentThread();//currentThread()   返回对当前正在执行的线程对象的引用。
			System.out.println(t.getName() + ":" + i);
			
		/*	//链式编程
			System.out.println(Thread.currentThread().getName() + ":" + i + num);*/
		}
	}

}

主类:

public class B_ThreadMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//创建线程实例
		B_MyThread mt = new B_MyThread();
		Thread t = new Thread(mt);
		
		t.setName("xu");
		t.start();
		
		//创建线程实例
		B_MyThread mt2 = new B_MyThread();
		Thread t2 = new Thread(mt2);
		
		t2.setName("ui");
		t2.start();
		
		
	}

}

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

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

相关文章

【生成数据】绘制简单的折线图

使用scatter绘制散点图并设置其样式 plt.scatter(2, 4, s200)#设置图表标题并给坐标轴加上标签 plt.title("Square Number", fontsize24) plt.xlabel("Value", fontsize14) plt.ylabel("Square of Value", fontsize14)#设置刻度标记的大小 plt.…

2022年,Rust与Go哪一个更好?

这是每一个程序员和开发人员都问过的问题&#xff0c;还有很多人仍然在问&#xff0c;即使他们已经做出了自己的决定。Rust vs. Go。2022年&#xff0c;我应该选择哪一个&#xff1f;或选择哪种语言--Golang或Rust。 Golang和Rust是目前使用的最年轻的编程语言。Go于2009年在谷…

最新ChatGPT4.0Plus开通教程-支付宝购买苹果礼品卡-亲测可用

2023.06.04亲测可用ChatGPT开通Plus教程 前言&#xff1a;一、准备工作二、购买苹果礼品卡一、官网购买礼品卡二、支付宝方式购买 三、AppStore充值礼品卡四、ChatGPT Plus 订阅五、iOS 端 ChatGPT Plus 订阅失败解决方法六、美区AppStore账号ID注册教程&#xff1a; 之前&…

【Svelte】一个简单的前端框架

Svelte.js的学习成本高吗&#xff1f; Svelte是新手编码初学者的完美平台。只需一个HTML/CSS和JavaScript技能组合&#xff0c;您就可以从头开始构建您的第一个网站&#xff0c;而无需额外的知识。 这使得学习曲线非常小&#xff0c;不像它的大多数替代方案。除此之外&#xf…

ChatGLM-6b 多任务微调

ChatGLM-6b也是一种预训练模型&#xff0c;它也可以通过微调来适应下游任务。实验表明&#xff0c;使用ChatGLM-6b微调和Bert类预训练模型微调的效果相近。如果采用多任务设计&#xff0c;ChatGLM-6b的效果会更好。你可以在这里了解更多关于ChatGLM-6B的信息: ChatGLM-6Bhttps:…

边缘化中FEJ图例的理解

如图所示&#xff0c;在解释为什么需要FEJ(First Estimation Jacobian)时&#xff0c;通常会将这个图拿出来说事。但是&#xff0c;很多时候只是一笔带过&#xff0c;这个图看的云里雾里的&#xff0c;不是非常明白(可能是我理解力的问题&#xff09;&#xff0c;所以&#xff…

AngularJs学习笔记--bootstrap

AngularJs学习笔记系列第一篇&#xff0c;希望我可以坚持写下去。本文内容主要来自 AngularJS 文档的内容&#xff0c;但也加入些许自己的理解与尝试结果。 一、总括 本文用于解释Angular初始化的过程&#xff0c;以及如何在你有需要的时候对Angular进行手工初始化。 二、An…

【云原生-K8s】k8s可视化管理界面安装配置及比较【Kubesphere篇】

总览 安装了k8s控制面板&#xff0c;方便日常的问题处理&#xff0c;查看资源状态信息&#xff0c;也可以增加子账号进行开放给其他人员使用&#xff0c;减少命令操作&#xff0c;提升工作效率 前置条件 须有一个正常使用的k8s集群附k8s v1.23版本搭建&#xff1a;https://…

JavaScript实例(Visual Studio Code)(一)

JavaScript程序本身不能独立存在 它是依附于某个HTML页面 在浏览器端运行的 基本语法&#xff1a; <script type"text/javascript" [src"外部js文件"]>... </script> 语法说明&#xff1a; script为脚本标记&#xff0c;它必须以<scri…

【小沐学Web】Rust实现Web服务器

文章目录 1、简介2、开发环境配置2.1 下载2.2 安装2.3 编辑工具2.4 构建工具2.5 自动化工具 3、Hello World4、TCP/UDP通信5、Web服务器结语 1、简介 https://www.rust-lang.org/ Rust: 一种使每个人都能够构建可靠且高效的软件的语言。 如今&#xff0c;全球有数百家公司在生…

谈谈Memcached与Redis

1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库&#xff0c;但是不支持数据的持久化&#xff0c;服务器关闭之后数 据全部丢失。Memcached使用C语言开发&am…

【01】水仙花数算法

水仙花数 是指一个n位数&#xff08;n ≥ 3&#xff09;&#xff0c;它的每个位上的数字的n次幂之和等于该数本身。换句话说&#xff0c;对于一个三位数而言&#xff0c;如果它满足条件&#xff1a;各个位上的数字的立方和等于该三位数本身&#xff0c;那么这个数就被称为水仙花…

chatgpt赋能python:Python操作——去除非字母元素优化SEO

Python操作——去除非字母元素优化SEO 介绍 在做SEO优化时&#xff0c;处理关键词是必不可少的环节。我们需要对关键词进行一些处理&#xff0c;使其更加规范、简洁、且易于搜索引擎的识别和分类。其中一个重要的环节&#xff0c;就是去除非字母元素&#xff0c;即去除关键词…

大模型训练和部署的关键技术

自2016年至今&#xff0c;模型大小每18个月增长40倍&#xff0c;自2019年到现在&#xff0c;更是每18个月增长340倍。 然而相比之下&#xff0c;硬件增长速度较慢&#xff0c;自2016年至今&#xff0c;GPU的性能增长每18个月1.7倍&#xff0c;模型大小和硬件增长的差距逐渐扩大…

LeetCode110. 平衡二叉树

题目 leetcode110. 平衡二叉树 思路 只有每个节点的左右子树高度差不超过1才是平衡二叉树&#xff0c;因此可以递归解决。 递归的2要素&#xff1a; ①终止条件&#xff1a;当左右子树高度差超过1时返回false&#xff1b;递归到空节点和叶子节点时&#xff0c;由于空节点和…

每日学术速递5.31

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Prompt-Free Diffusion: Taking "Text" out of Text-to-Image Diffusion Models 标题&#xff1a;无提示扩散&#xff1a;从文本到图像扩散模型中提取“文本” 作者&…

单片机GD32F303RCT6 (Macos环境)开发 (三十五)—— 数字加速度计 (ADXL345 ) 使能中断获取运动与静止状态

数字加速度计 &#xff08;ADXL345&#xff09;- 使能中断获取运动与静止状态 1、几个与运动、静止检测相关的寄存器 a、寄存器 0x24—THRESH_ACT(读/写) THRESH_ACT寄存器为8位寄存器&#xff0c;保存检测活动的阈 值。数据格式无符号&#xff0c;因此&#xff0c;活动事件…

从零开始 Spring Boot 35:Lombok

从零开始 Spring Boot 35&#xff1a;Lombok 图源&#xff1a;简书 (jianshu.com) Lombok是一个java项目&#xff0c;旨在帮助开发者减少一些“模板代码”。其具体方式是在Java代码生成字节码&#xff08;class文件&#xff09;时&#xff0c;根据你添加的相关Lombok注解或类来…

冈萨雷斯DIP第9章知识点

文章目录 9.1 预备知识9.2 腐蚀和膨胀9.3 开运算与闭运算9.5 一些基本的形态学算法9.8 灰度级形态学 9.1 预备知识 形态学运算是用 集合 来定义的 。 在图像处理中 使用两类像素集合的形态学&#xff1a;目标元素 和 结构元 SE 。 通常目标定义为前景像素集合&#xff0c;结构…

计算机基础--->操作系统(2)【线程和进程、死锁】

文章目录 线程和进程线程和进程的区别&#xff1f;有了进程为什么还需要线程&#xff1f;为什么使用多线程&#xff1f;线程间的同步方式进程控制块&#xff08;PCB&#xff09;进程有哪几种状态&#xff1f;进程间的通讯方式有哪些&#xff1f;进程常见的调度算法有哪些&#…