JavaSE学习笔记 Day21

JavaSE学习笔记 Day21

个人整理非商业用途,欢迎探讨与指正!!
« 上一篇


文章目录

  • JavaSE学习笔记 Day21
    • ···
    • 十八、多线程
      • 18.1多线程概念
      • 18.2线程的组成
      • 18.3线程的创建
        • 18.3.1继承Thread类
        • 18.3.2实现Runnable接口
        • 18.3.3两种创建线程的区别
      • 18.4线程启动时一定要注意的问题★★★★☆
      • 18.5线程的基本状态
      • 18.6线程的常用方法


···

十八、多线程

18.1多线程概念

进程:程序是静态的,真正运行起来的程序被称之为进程
线程:轻量级的进程,每个程序都有固定的顺序向下执行,同时被电脑的CPU进行调度的,进程有多个线程组成,每个线程之间完成不同的工作,交替执行,被称之为多线程
百度网盘就一个进程,可以同时控制多个上传和下载的任务。
Java中的JVM是一个进程,main方法就是进程中的主线程,可以通过创建线程对象独立于主线程之外并发的执行(异常处理就是独立线程的)

18.2线程的组成

CPU时间片
运行的数据
线程中的逻辑代码

18.3线程的创建

java中是支持多线程的,提供多种创建线程的方式
 两种基本的:
 1.继承Thread类
 2.实现Runnable接口

18.3.1继承Thread类
//	继承Thread类
public class MyThread extends Thread{//	若自定义线程功能代码,需要重写run方法
//	run就是一个普通的方法,在线程启动时,由线程自动的调用@Overridepublic void run() {for(int i = 1;i<=100;i++) {System.out.println("我是线程中的数值:"+i);}}public static void main(String[] args) {
//		main就是一个线程对象,该对象由JVM调用,main线程无需启动
//		创建线程对象MyThread m1 = new MyThread();
//		我们的线程需要启动m1.start();
//		run就是一个普通方法
//		m1.run();for(int i = 1;i<=100;i++) {System.out.println("我是主线程中的数值:"+i);}}
}
18.3.2实现Runnable接口

Runnable本身不是线程,只是实现了该接口的类有了线程的特性

//	实现Runnable
public class MyRunnable implements Runnable {@Overridepublic void run() {for(int i = 1;i<=10;i++) {System.out.println("我的线程:"+i);}}public static void main(String[] args) {
//		创建实现类对象MyRunnable my1 = new MyRunnable();//		借助于Thread类,进行启动
//		创建线程对象Thread t1 = new Thread(my1);//		启动t1.start();for(int i = 1;i<=10;i++) {System.out.println("main:"+i);}}
}
18.3.3两种创建线程的区别

创建方式不同
 继承Thread类之后的子类本身就是线程了,可以直接使用start进行启动
 实现Runnable接口实则是代理模式的,仍然需要交给Thread类进行线程的启动操作
  实际应用中实现Runnable方式创建线程的方式会多一些,因为Java是单继承的
设置线程名字的方式不同

public class Test01 {public static void main(String[] args) {
//		每个线程都是默认的名字MyThread m1 = new MyThread("线程1");System.out.println(m1.getName());Thread t1 = new Thread(new MyRunnable(),"线程2");System.out.println(t1.getName());}
}

18.4线程启动时一定要注意的问题★★★★☆

run只是一个普通方法
线程的启动使用start方法
线程启动后会自动的调用run方法
一个线程只能start一次

18.5线程的基本状态

初始状态:线程对象被创建(new线程对象),只在堆中开辟空间,和常规对象没有任何的区别
就绪状态:调用start方法时就进入了就绪状态,等待CPU时间片的选中
运行状态:获取时间片之后,进入了运行状态,若时间片到期了,就回到就绪状态
终止状态:主线程或者独立线程的run方法执行完毕类,就进入到终止状态,并会释放持有的时间片

18.6线程的常用方法

//	和线程名字相关的方法
public class Test02 {public static void main(String[] args) {
//		String str = null;Thread t1 = new Thread("线程1");
//		获取线程名的方法System.out.println(t1.getName());
//		设置线程名t1.setName("Thread------0");System.out.println(t1.getName());//		查看当前执行的线程
//		查看当前main线程System.out.println(Thread.currentThread());//		A的默认为就是Thread-0A a = new A();a.setName("AAAA");a.start();
//		a.run();//run就是普通方法,若使用线程调用,就是main在调用,若使用start才是对应的线程对象}
}class A extends Thread {@Overridepublic void run() {
//		在A线程中执行,查看的就是A线程System.out.println(Thread.currentThread());}
}

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

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

相关文章

银行测试:第三方支付平台业务流,功能/性能/安全测试方法

1、第三方支付平台的功能和结构特点 在信用方面&#xff0c;第三方支付平台作为中介&#xff0c;在网上交易的商家和消费者之间作一个信用的中转&#xff0c;通过改造支付流程来约束双方的行为&#xff0c;从而在一定程度上缓解彼此对双方信用的猜疑&#xff0c;增加对网上购物…

【lesson18】MySQL内置函数(1)日期函数和字符串函数

文章目录 日期函数函数使用具体使用案例建表插入数据建表插入数据 字符串函数函数使用具体使用案例建表插入数据测试 日期函数 函数使用 获得年月日&#xff1a; 获得时分秒&#xff1a; 获得时间戳&#xff1a; 获得现在的时间&#xff1a; 在日期的基础上加日期&#xf…

C++ Qt开发:TableWidget表格组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TableWidget表格组件的常用方法及灵活运用。 …

基于python的leetcode算法介绍之递归

文章目录 零 算法介绍一 简单示例 辗转相除法Leetcode例题与思路[509. 斐波那契数](https://leetcode.cn/problems/fibonacci-number/)解题思路&#xff1a;题解&#xff1a; [206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)解题思路&#xff1a;题解&…

深度学习 该用什么标准判断差异最小

决定差异最小的标准通常依赖于您的具体问题和任务。以下是一些常见的用于评估预测性能的标准和思路&#xff1a; 1. **均方根误差 (RMSE):** RMSE 是预测值和真实值之间差异的平方的平均值的平方根。它对较大的误差更加敏感。 from sklearn.metrics import mean_squared_error…

Jmeter中使用py插件

-安装插件 1、下载插件jython-standalone-2.7.0.jar到jmeter的lib\ext目录下 链接&#xff1a; https://pan.baidu.com/s/13ZXtUwoQEV62M98GaIR26w 提取码&#xff1a;ioyk 2、重启jmeter&#xff0c;查看是否生效&#xff0c;如果这个语言有python的选项说明可以了&#xf…

VMware虚拟机安装Linux操作系统

1.CentOS 7安装 软件选择&#xff0c;安装桌面系统 2.配置虚拟机网卡 3.连接Xshell

测试用例评审流程优化

测试用例评审是QA日常工作流程中的关键一环&#xff0c;是QA同学完善测试用例、交流测试经验的好机会。 负责组内测试用例建设以来&#xff0c;作者对于评审流程做了一些优化工作。本文作者将整个优化过程中的心得体会做了一个总结&#xff0c;希望能给大家带来帮助。 01 原始流…

Model-based value iteration and policy iteration pseudocode

Note that the symbols used in the pseudocode below have the following meanings: MDP: Markov Decision Process;V(s): Value function, the avg reture of one state;π(s): Policy, in the sense that for a given state s, π(s)represents the action that the agent …

【MySQL】 表的操作

// 创建表 create table 表名();// 查看表结构 desc 表名;// 新增一列表信息 alter table 表名 add 字段名 字段类型 (after 原表某一字段名);// 删除一列表信息 alter table 表名 drop 字段名;// 修改表字段名字 alter table 表名 change 原字段名 新字段名 类型; // 新字…

企业微信自动登录自定义系统

方法一&#xff1a;企业微信构造OAuth2链接跳转登录到自定义系统 企业微信自定义应用配置 构造网页授权链接 如果企业需要在打开的网页里面携带用户的身份信息&#xff0c;第一步需要构造如下的链接来获取code参数&#xff1a; https://open.weixin.qq.com/connect/oauth2/…

数据可视化---饼图、环形图、雷达图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

ubuntu18.04 升级到ubuntu22.04版本

要将 Ubuntu 18.04 LTS 升级到 Ubuntu 22.04 LTS&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 备份您的数据 在进行系统升级之前&#xff0c;建议备份所有重要数据&#xff0c;以防升级过程中出现任何问题。 2. 更新当前系统 确保您的 Ubuntu 18.04 系统是最新的。打…

【微服务】springboot整合minio详解

目录 一、前言 二、Minio 概述 2.1 Minio简介 2.1 Minio特点 三、Minio 环境搭建 3.1 部署过程 3.1.1 拉取镜像 3.1.2 启动容器 3.1.3 访问web页面 四、Minio基本使用 4.1 基本概念 4.2 上传文件演示 4.3 用户管理 4.4 Java操作Minio 4.4.1 导入依赖 4.4.2 上传…

MATLAB 平面拟合并可视化(34)

MATLAB 平面拟合并可视化(34) 一、效果二、代码一、效果 二、代码 % 生成三维点数据 x = rand(100, 1); y = rand(100, 1

Express及mongoose搭建数据库(增删改查)

express是什么&#xff1f; Express.js 是一个基于 Node.js 平台的 Web 应用程序框架&#xff0c;它旨在帮助开发者轻松构建和管理 Web 服务和应用程序。Express 提供了许多强大的功能&#xff0c;使得创建可扩展、灵活且高性能的 Web 应用变得相对容易。 安装Express步骤 确保…

棋牌的电脑计时计费管理系统教程,棋牌灯控管理软件操作教程

一、前言 有的棋牌室在计时的时候&#xff0c;需要使用灯控管理&#xff0c;在开始计时的时候打开灯&#xff0c;在结账后关闭灯&#xff0c;也有的不需要用灯控&#xff0c;只用来计时。 下面以 佳易王棋牌计时计费管理系统软件为例说明&#xff1a; 软件试用版下载或技术支…

【PostgreSQL】从零开始:(七)PostgreSQL-Initdb命令初始化数据库

概述 initdb是PostgreSQL初始化数据库的工具&#xff0c;用来生成PostgreSQL的Data目录结构 使用initdb 创建数据库集群时&#xff0c;会自动初始化区域设置支持。 initdb 默认情况下将使用其执行环境的区域设置来初始化数据库集群&#xff0c;因此&#xff0c;如果您的系统已…

LVS+Keepalived集群的介绍和搭建

目录 LVSKeepalived集群的介绍 Keepalived及其工作原理 Keepalived体系主要模块及其作用 一个合格的集群应该具备的特性 健康检查&#xff08;探针&#xff09;的方式 实验&#xff1a;搭建LVSKeepalived集群 实验准备 实验步骤 LVS 部署 配置节点服务器 实验验证 实…

【【UART 传输数据实验】】

UART 传输数据实验 通信方式在日常的应用中一般分为串行通信&#xff08;serial communication&#xff09;和并行通信&#xff08;parallel communication&#xff09;。 我们再来了解下串行通信的特点。串行通信是指数据在一条数据线上&#xff0c;一比特接一比特地按顺序传…