当前位置: 首页 > news >正文

多线程的学习(1)

线程的创建方式

1.继承Thread类

package duoXianCheng;public class MyThread extends Thread{public void run(){System.out.println("hoh");}public static void main(String[] args) {MyThread m1 = new MyThread();m1.start();//start启动线程,调用重写的run方法}
}

2.实现Runnable接口

package duoXianCheng;public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Hello World");}public static void main(String[] args) {Runnable runnable = new MyRunnable();Thread thread = new Thread(runnable);//创建Thread对象,将runnable对象传入构造方法中thread.start();}
}

3.实现Callable接口

package duoXianCheng;import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;public class MyCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return 0;}public static void main(String[] args) {FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyCallable());new Thread(futureTask).start();//}
}

Thread,Callable,Runnable的区别:

  • Thread
    • 是 Java 中用于表示线程的类。它直接继承自 Object 类,并实现了 Runnable 接口。
    • 可以直接创建一个 Thread 对象来启动一个新线程,在新线程中执行特定的任务。
  • Runnable
    • 是一个接口,只有一个抽象方法run()
    • 实现了 Runnable 接口的类必须实现run()方法,用于定义线程要执行的任务。通常将 Runnable 实例作为参数传递给 Thread 构造函数来创建新线程并执行该任务。
  • Callable
    • 也是一个接口,它与 Runnable 类似,但有一个不同之处在于它的call()方法可以返回一个结果并且可以抛出异常。
    • 通常与FutureTask结合使用,用于需要有返回值的异步任务。

线程的优先级:

package duoXianCheng;public class youXianJi {public static void main(String[] args) {// 创建两个线程,一个优先级高,一个优先级低Thread lowPriorityThread = new Thread(() -> {for (int i = 0; i < 5; i++) {System.out.println("低优先级线程在运行:" + i);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}});lowPriorityThread.setPriority(2);Thread highPriorityThread = new Thread(() -> {for (int i = 0; i < 5; i++) {System.out.println("高优先级线程在运行:" + i);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}});highPriorityThread.setPriority(9);lowPriorityThread.start();highPriorityThread.start();}
}

线程调度

两种调度方式

1、分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片

2、抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些

Java使用的是抢占式调度模型、随机性

假如计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。

所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的

设置和获取优先级

final int getPriority() 返回此线程的优先级

final void setPriority(int newPriority) 更改此线程的优先级线程默认优先级是5;线程优先级的范围是:1-10

相关文章:

多线程的学习(1)

线程的创建方式 1.继承Thread类 package duoXianCheng;public class MyThread extends Thread{public void run(){System.out.println("hoh");}public static void main(String[] args) {MyThread m1 new MyThread();m1.start();//start启动线程&#xff0c;调用重…...

PyCharm借助MobaXterm跳板机连接服务器

服务器信息&#xff1a; Step 1 MovaXterm→Session→SSH输入服务器信息 Step 2 MovaXterm→Session→SSH→Network setting→SSG gateway(jump host) 输入跳板机信息 键入密码即可 Step 3 MovaXterm→Tunneling→New SSH tunnel 依次输入&#xff1a;A本机端口&#xff0c…...

计算机毕业论文基于Android 的签到系统设计与实现

计算机专业本科毕业设计(论文)开题报告 毕业设计(论文)题目:基于Android的签到系统设计与实现 文章目录 毕业设计论文开题报告一、课题的目的及意义(含国内外的研究现状分析):二、课题任务、重点研究内容、实现途径、条件:摘 要1. 绪论1.1. 研究背景1.2. 研究现状1.3.…...

量化学习-02

1、宏观经济学基础概念 宏观经济简单背景 宏观经济&#xff0c;就是在宏观范畴以全局视角观察经济现象&#xff0c;分析其中的经济总量。该宏观范畴所包含的范围可以指一个国家或地区&#xff0c;是由众多微观个体组成的一个经济体&#xff0c;而这里面的微观个体可以指一个家…...

SAP_MM模块-设置业务合作伙伴类型字段必输(多种方案)

一、业务背景 公司需要把供应商增加一个细分的维度&#xff0c;并且要求该字段设置为必输&#xff0c;防止用户新增供应商时忘记维护。这里给用户找了一个分类的字段&#xff1a;业务合作伙伴类型&#xff0c;本文主要讲解如何设置该字段设置为必填&#xff1b; 注意&#xff…...

STM32平台上实现串口接收不定长数据-实际项目中应用

文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断DMA方式四、总结 本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法 一、中断串口监听方式 这种方式也是我早期使用的方式&#xff0c;直接使用寄存器来操作&#xff0c;这种方…...

AWD入门

一、简介 AWD(Attack With Defense&#xff0c;攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同时你也要保护自己的主机不被别人…...

T3矩阵看功率

每个像素的T3矩阵&#xff0c;功率等于特征值的和。 不同的像素的T3矩阵相加&#xff0c;可不能用特征分解的相加&#xff0c;因为两个T矩阵的特征向量不同...

VLMEvalKit多模态大模型评测工具源码解析

vlmeval/api和vlmeval/vlm文件夹下分别是api接口和本地运行的大模型的代码 基类都是base vlmeval/dataset是数据集处理代码 vlmeval/inference.py是推理代码 run.py的整个流程 1 vlmeval/api/base.py 主要为需要与外部API交互的系统提供了一个通用的框架 类属性 allowed_type…...

将 Docker 安装到指定目录

将 Docker 安装到指定目录 将 Docker 安装到指定目录 Docker 默认安装在 C:\Program Files\Docker\Docker&#xff0c;这可能会占用大量 C 盘空间。你可以按以下步骤将 Docker 安装到其他盘&#xff08;例如 E 盘&#xff09;&#xff1a; 创建安装目录&#xff1a;在 E 盘创…...

哪些企业需要部署SD-WAN?

首先&#xff0c;让我们先明确SD-WAN的定义。SD-WAN&#xff0c;中文全称为软件定义广域网&#xff08;Software-Defined Wide Area Network&#xff09;&#xff0c;通过集中化管理与流量控制&#xff0c;帮助企业优化网络性能&#xff0c;提升用户体验。与传统广域网&#xf…...

通信基站类型、频段与网络标准

【1】通信基站类型 移动通信基站根据覆盖面积和功率大小主要可以分为以下几种类型&#xff1a; 宏基站&#xff08;宏站&#xff09;&#xff1a;这是最常见的基站类型&#xff0c;具有较大的发射功率和较广的覆盖范围&#xff0c;通常覆盖半径从1到25公里不等。宏基站主要用于…...

Java IO教程之Java 文件一口气讲完!( *︾▽︾)

Java 文件 Java IO教程 - Java文件 File类的对象是文件或目录的路径名的抽象表示。 创建文件 我们可以从中创建一个 File 对象 路径名父路径名和子路径名URI&#xff08;统一资源标识符&#xff09; 我们可以使用File类的以下构造函数之一创建一个文件&#xff1a; File(…...

如何在 Ubuntu 24 上安装 Vmware Tools

原文 Vmware Tools作用 增强图形显示性能 分辨率适配 可使虚拟机的分辨率能够自动适应窗口大小的变化。当您调整 VMware 软件窗口的大小时&#xff0c;Ubuntu 24 虚拟机的屏幕分辨率会随之自动调整&#xff0c;为用户提供更好的视觉体验&#xff0c;方便在不同的使用场景下进…...

内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)

内网穿透&#xff1a;如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)-含详细原理配置说明介绍 前言 远程桌面协议(RDP, Remote Desktop Protocol)可用于远程桌面连接&#xff0c;Windows系统&#xff08;家庭版除外&#xff09;也是支持这种协议的&#xff0c;无需安装…...

明星作家都在使用的电子书制作工具,现在向大家介绍

​在数字化时代&#xff0c;电子书已经成为了广大读者和作家的新宠。越来越多的作家开始尝试将手中的文字作品转化为电子书&#xff0c;以便在更广泛的平台上推广和传播。那么&#xff0c;如何高效、便捷地制作电子书呢&#xff1f;今天&#xff0c;我们就来为大家揭秘一款明星…...

简单认识Maven 3-认识pop.Xml配置文件中的代码

pom.xml是 Maven 项目的核心配置文件&#xff0c;它包含了项目的各种配置信息&#xff0c;以下是对其主要内容含义的认识&#xff1a; 一、项目基本信息 <groupId>&#xff1a; 定义项目的组织或团体的唯一标识符&#xff0c;通常采用反向域名的格式。例如&#xff0c;“…...

LangChain4j系列—OpenAI开发实例

一、引入Maven依赖 1、纯Java <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.35.0</version> </dependency> 2、Spring boot <dependency><groupId&g…...

Java 中简化操作集合的方法

在日常 Java 开发中&#xff0c;我们经常需要操作集合&#xff0c;如 List、Set 和 Map。虽然 Java 提供了丰富的集合框架供开发者使用&#xff0c;但在实际编写业务逻辑时&#xff0c;如何简化集合操作、提高代码可读性和效率&#xff0c;依然是一个经常遇到的问题。特别是随着…...

ArcGIS Pro SDK (十七)宗地结构

ArcGIS Pro SDK (十七)宗地结构 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 宗地结构 1 获取活动记录 string errorMessage = await QueuedTask.Run(() => {...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...