黑马程序员--多线程

2023-11-11

黑马程序员--多线程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、定义

进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径或叫控制单元。
线程:进程中的一个独立的控制单元。线程在控制着进程的执行。 一个进程中至少有一个线程。

二、多线程作用

优点:多任务共同进行,防止后任务在一定时间内执行不到的问题发生。
弊端:线程如果太多,会导致效率降低。

多线程内部执行方式:

1、多线程运行结果的随机性:多线程中,线程间都会获取cpu的执行权,cpu执行到谁,谁就运行。
明确一点:某一时刻,只能有一个程序在运行(多核除外)。
2、cpu在做着快速的切换,已达到看上去是同时运行的效果。所以当线程过多时,cpu的切换次数会增多,
造成运行效率降低。所以,多线程的运行行为可看成互相抢夺cpu的执行权。
3、JVM 启动的时候会有一个进程 java.exe. 该进程中至少一个线程负责java程序的执行。
而且这个线程运行的代码存在于main方法中。该线程称之为主线程。
4、JVM也是一个多线程。JVM运行不止启动一个主线程,还有负责启动垃圾回收机制。

三、自定义线程

1、线程运行状态:被创建、运行、临时状态、冻结、消亡五种状态。

2、创建线程方式:
第一种方式:继承Thread类。
步骤:
a、定义类继承Thread
b、复写Thread类中的run方法。原因:每个线程都有自己的目的性。JVM将创建的主线程任务定义在主函数中(main)。
run方法就是Java给用户用于创建自己任务的区域。
c、调用线程的start()。start()有两个作用:a、启动线程;b、让java虚拟机调用该函数的run方法。
//通过继承创建自己的线程
class Demo extends Thread
{
	public void run()
	{
		for(int x=0;x<5;x++)
			System.out.println("demo run--"+x);
	}
}
class RunDemo
{
	public static void main(String[] args)
	{
		//创建线程的目的:开启一条执行路径。可理解为抢夺资源。
		Demo a = new Demo();

		//开启线程并执行该线程的run方法。可理解为:赛跑的信号枪。
		a.start(); 

		//一般的对象调用方法。是一个强制性命令。系统会执行完run()后,再运行主函数。
		//a.run();

		for(int x=0;x<5;x++)
			//用Thread类的getName()方法获取执行线程的名称。Thread.currentThread()==this;
			System.out.println("Hellow World--"+x+this.getName());
	}
}
多线程输出结果:


单线程执行结果:


第二种方式:实现Runnable接口。
该类实现run方法,然后可以分配该类的实例,在创建Thread时作为一个参数来传递并启动。
步骤:
a、定义类实现Runnable接口
b、覆盖Runnable接口中的run方法,将线程要运行的代码存放在该run方法中。
c、通过Thread类建立线程对象。
d、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法,
就必须明确该run方法所属对象。(让你儿子去打酱油,你必须告诉他超市在哪)
e、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

//实现Runnable,建立多线程
class Ticket implements Runnable //extends Thread
{
	//此处可定义static让数据变成共享数据。但一般不定义static,因为其寿命太长。
	private int tick = 100;
	public void run()
	{
		//while(true):无限循环,增加问题出现的可能性。
		while(true)
		{
			if(tick>0)
			{
				//Thread.currentThread():获取当前线程对象。getName():获取线程名称。
				System.out.println(Thread.currentThread().getName()+"....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑马程序员--多线程 的相关文章

  • 如何消除 Java BoxLayout 中的间距?

    I programmed following ListPanel 使用 JavaScriptBoxLayout public class ListPanel extends JPanel private ArrayList
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • 外部实体更改后索引不更新

    我目前正在开发一个项目 使用 JPA 2 1 保存数据并使用 hibernate search 4 5 0 final 搜索实体 映射类和索引后 搜索工作正常 但是 当我更改值时描述B 类从 someStr 到 anotherStr 数据库
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 如何从 Java 中“double”类型的值中删除小数值

    我正在调用一个名为 calculateStampDuty 的方法 它将返回 财产需缴纳的印花税金额 百分比计算有效 很好 并返回正确的值 15000 0 但是 我想显示该值 前端用户只是 15000 所以只想删除小数点和任何前面的值 此后
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • java 中的 Try-with-resources 和 return 语句

    我想知道是否放一个return里面的声明尝试资源block 防止资源自动关闭 try Connection conn return conn createStatement execute 如果我写这样的东西将会联系被关闭 Oracle 文
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • 用于安装 R 软件包的备用编译器:clang:错误:不支持的选项“-fopenmp”

    我正在尝试在 OS X 10 11 6 上使用 R 版本 3 4 0 安装 rJava 包 install packages rJava type source 我收到以下错误 clang o libjri jnilib Rengine o
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http

随机推荐

  • Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器

    Mybatis Plus入门 MP是 MybatisPlus 简称MP 是一个 Mybatis 的增强工具 在 Mybatis 的基础上只做增强不做改变 MP为简化开发 提高效率而生 它已经封装好了单表curd方法 我们直接调用这些方法就能
  • java引入bean代码_Spring学习笔记之通过Java代码装配Bean

    自建博客地址 https bytelife net 欢迎访问 本文为博客自动同步文章 为了更好的阅读体验 建议您移步至我的博客 虽然很多场景下可以使用组件扫描和自动装配来实现Spring的自动化配置 但有些时候自动化配置的方案是行不通的 因
  • java 图片验证码

    image jsp 主要是采用下面导入的几个包来绘制 验证码图片
  • 【activiti 入门】springboot 集成activiti6.0的demo

    环境 jdk 1 8 maven 3 0 IDEA插件之actiBPM springboot2 0 activiti6 0 mysql数据库 具体demo地址 https download csdn net download qq 3333
  • ThreadCreationCmp

    package io github viscent mtia ch1 import io github viscent mtia util Tools public class ThreadCreationCmp public static
  • 时序预测

    时序预测 MATLAB实现SSA GRU 麻雀算法优化门控循环单元 时间序列预测 目录 时序预测 MATLAB实现SSA GRU 麻雀算法优化门控循环单元 时间序列预测 预测效果 基本介绍 模型介绍 程序设计 参考资料 预测效果 基本介绍
  • WCF:The maximum string content length quota (8192) has been exceeded while reading XML data

    修改接收端的WCF config文件 注意 如果server端接收request超长 则修改server端config 如果是client 接收response超长 则修改client端 建议两边都修改 保持一致
  • Linux下使用smbclient传输文件夹(包括文件)脚本

    遍历文件夹 是文件就put上去 不是文件就创建目录 根据自己的需求改一下前面的directory serverpath des directory就可以用了 在代码中smbclient中使用了 N 因为我用的是匿名登录 加了 N就不需要提示
  • nodejs,zip压缩版安装与配置

    下载zip包 下载 Node js 解压 将文件解压到要安装的位置 并新建两个目录node global npm全局安装位置node cache npm 缓存路径 配置环境变量 NODE PATH D Program Files node
  • GridView和CheckBox结合[转]

    效果图 后台代码 Code 1using System 2using System Data 3using System Configuration 4using System Web 5using System Web Security
  • 算法:反转链表 java

    方法1 迭代 public static Node reverseNode Node head 前一个节点 Node pre null 当前节点 Node cur head 如果当前节点不为空 while cur null 存储下一个节点
  • 《数学建模实战攻略:引言》

    一 专栏简介与目标 欢迎来到 数学建模实战攻略 专栏 本专栏旨在帮助初学者 参加数学建模竞赛的学生以及对数学建模感兴趣的研究者和开发者全面了解数学建模的知识体系 掌握建模方法和技巧 提高解决实际问题的能力 本专栏将涵盖数学建模的基本概念 方
  • ALSA信息查看

    1 1 1 查看当前Soc的声卡状态 cat proc asound cards 例如 插入USB声卡之后 会新增声卡节点 USB声卡无声可优先查看该状态 1 1 2 查看当前声卡工作状态 声卡分两种通道 一种是Capture 一种是Pla
  • web的欢迎资源文件

    欢迎资源文件 1 前提 用户可以记住网站名 但是不会记住网站资源文件名 2 默认欢迎资源文件 用户发送了一个针对某个网站的 默认请求 时 此时由Http服务器自动从当前网站返回的资源文件 正常请求 http localhost 8080 m
  • 关于Electron 串口通讯serialport 打包的问题

    请教各位大佬一下 我使用serialport模块 程序编译后正常运行 但是无法打包 目前搞不清楚原因 特来请教 PS C Users appyjj Desktop cart gt npm run build gt cart 1 0 0 bu
  • 学会项目成本管理计算,PMP计算题就是送分题

    学会项目成本管理计算 PMP计算题就是送分题 PMP中的计算主要在 lt 项目成本管理 gt 的控制成本部分 服务于挣值管理 EVM Earned Value Management 挣值分析 EVA Earned Value Analysi
  • MySQL学习日记day04(索引、视图、DBA常用命令、数据库设计三范式)

    目录 一 索引 index 1 什么是索引 2 索引的实现原理 3 在mysql当中 主键上 以及unique字段上都会自动添加索引的 4 索引怎么创建 怎么删除 语法是什么 5 在mysql当中 怎么查看一个SQL语句是否使用了索引进行检
  • Node.js 下载安装环境配置 - 图文版

    Node js 是一个开源 跨平台的 JavaScript 运行时环境 一 介绍 1 官方文档 1 中文文档 Node js 中文网 2 英文文档 Node js 二 下载 1 中文 2 英文 编辑三 安装 1 新建一个文件夹作为安装路径
  • Win11家庭版怎么开启远程桌面

    Win11家庭是专为家庭用户准备的版本 由于Win11系统是一款全新的系统 很多用户对一些功能还不是很熟悉 那么Win11家庭版怎么开启远程桌面 下面就来看看详细教程 Win11家庭版开启远程桌面教程 1 首先 我们需要先下载安装一款远程桌
  • 黑马程序员--多线程

    黑马程序员 多线程 Java培训 Android培训 iOS培训 Net培训 期待与您交流 一 定义 进程 是一个正在执行中的程序 每一个进程执行都有一个执行顺序 该顺序是一个执行路径或叫控制单元 线程 进程中的一个独立的控制单元 线程在控