Java 多线程练习 (2024.8.12)

news/2025/1/23 6:51:35/

        MultiProcessingExercise1

java">package MultiProcessingExercise20240812;public class MultiProcessingExercise1 {public static void main(String[] args) {// 设置、获取线程名称// 如果使用继承Thread类的方式实现多线程,那么可以直接通过set和get方法进行设置和获取线程名称MyThread1 thread1 = new MyThread1(); // 这个类是直接继承的Thread类,可以直接用set和get方法thread1.setName("线程1");MyThread1 thread2 = new MyThread1(); // 这个类是直接继承的Thread类,可以直接用set和get方法thread2.setName("线程2");// 开启两条线程,发现多线程的set和get方法成功实现thread1.start();thread2.start();// 若不是用的直接继承Thread类实现多线程,那么则不能直接用set和get方法(不建议在实现类中写set和get方法)// 可以使用Thread中的静态方法:currentThread————返回对当前正在执行的线程对象的引用,然后再使用set和get方法// 用实现Runnable类创建Thread对象MyRunnable runnable1 = new MyRunnable();MyRunnable runnable2 = new MyRunnable();Thread thread3 = new Thread(runnable1, "线程3"); // 可以用构造方法给线程命名(相当于set方法了)Thread thread4 = new Thread(runnable2, "线程4");thread3.start();thread4.start();// 注:四条线程一起抢占CPU资源}
}

        MyThread1

java">package MultiProcessingExercise20240812;public class MyThread1 extends Thread {@Overridepublic void run() {for (int i = 0; i<= 100; i++) {System.out.println(this.getName() + ": " + i);}}
}

        MultiProcessingExercise2

java">package MultiProcessingExercise20240812;public class MultiProcessingExercise2 {public static void main(String[] args) {// 线程休眠// static void sleep(long millis) 使当前正在执行的线程停留(暂停执行)指定的毫秒数// 意义:主要是为了出让线程占用的CPU资源,让其他线程有机会执行,从而实现线程之间的轮换调用// 作用:// 1.假如某个任务需要等待资源准备(硬盘和内存的问题和CPU无关),通过线程休眠,可以避免CPU空转// 2.通过让线程休眠,避免某个线程长时间的占用CPU资源,从而降低CPU负载// 3.配合其他同步机制,线程休眠可以实现复杂的线程同步机制// 其作用主要是从效率和需求方面进行考虑的MyThread2 myThread1 = new MyThread2();MyThread2 myThread2 = new MyThread2();myThread1.setName("线程1");myThread2.setName("线程2");myThread1.start();myThread2.start();}
}

        MyRunnable

java">package MultiProcessingExercise20240812;public class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i <= 100; i++) {System.out.println(Thread.currentThread().getName() + ": " + i);}}
}

 

        MyThread2

java">package MultiProcessingExercise20240812;public class MyThread2  extends Thread{@Overridepublic void run() {for (int i = 0; i <= 100; i++) {try{Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName() + "成功抢到CPU资源"); // 每一行语句后线程都会抢占CPU资源System.out.println(getName() + ": " + i);}}
}

        MultiProcessingExercise3

java">package MultiProcessingExercise20240812;public class MultiProcessingExercise3 {public static void main(String[] args) {// 线程的优先级// 两种调度线程的方式// 1.分时调度模型:所有CPU轮流使用CPU,平均分配每个线程占用CPU的时间片// 2.抢占式调度模型:优先让优先级高的线程使用CPU,若优先级相同,则随机选择;但是这并不绝对,只是优先级高的线程获取的CPU时间片相对较多// Java使用的是抢占式调度模型// 随机性:// 假如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令// 所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的(优先级高的抢占到CPU时间片概率高)// 优先级相关方法// final int getPriority() 返回该线程的优先级// final void setPriority(int newPriority) 更改该线程的优先级,默认是5,优先级的更改范围为1-10MyThread1 myThread1 = new MyThread1();MyThread1 myThread2 = new MyThread1();// 发现两个线程的默认优先级是5
//        System.out.println(myThread1.getPriority());
//        System.out.println(myThread2.getPriority());// 设置两个线程的优先级myThread1.setPriority(1);myThread2.setPriority(10);myThread1.setName("线程1");myThread2.setName("线程2");myThread1.start();myThread2.start();// 即使线程2的优先级远高于线程1,但是线程优先级只是概率问题,并不绝对,所以说有时线程1会比线程2先执行完毕,但是这只是小部分情况}
}

      

 

 

 

 

 

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

相关文章

Oracle ACE是什么缩写?

大家都知道&#xff0c;Oracle有个ACE 计划&#xff0c;旨在奖励和表彰个人对 Oracle 社区做出的贡献。 这些贡献主要包括两方面&#xff1a; 知识与经验分享&#xff0c;如撰写博客、书籍和文章&#xff1b;制作视频教程&#xff1b;为开源项目做贡献&#xff1b;编写代码&a…

10分钟学会Docker的安装和使用

Docker 是一个用于开发、发布和运行应用程序的开源平台。它通过提供轻量级的容器技术&#xff0c;使得应用程序可以在任何环境中一致地运行。以下是快速学会Docker的安装和使用的步骤。 1. 安装Docker 在Windows上安装 下载Docker Desktop&#xff1a; 访问Docker官网下载适用…

Java->双击Window批处理程序动态切换Java版本

JDK8 echo off chcp 65001 >nul :: 设置控制台编码为UTF-8&#xff0c;避免中文乱码:: 检查是否以管理员身份运行 openfiles >nul 2>&1 if %errorlevel% neq 0 (echo 请求管理员权限...powershell -Command "Start-Process cmd -ArgumentList /c %~fnx0 -Ve…

13.1 Python 正则表达式基础

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

苹果发布 AirPods Pro 2 测试版固件 搭配iOS 18新特性

苹果今天发布了AirPods Pro 2 的第三个测试版固件&#xff0c;包括 Lightning 和 USB-C 两个版本。更新后的固件版本号为 7A5266c&#xff0c;高于 7A5244b&#xff0c;目前可供开发者使用。这是苹果公司自 6 月份宣布 AirPods Pro 2 新功能以来发布的第三个固件更新。 作为iOS…

git拉取后,代码不见了,没有冲突覆盖,且,没有删除,看我是怎么找回的

git拉取后&#xff0c;代码不见了&#xff0c;没有冲突覆盖&#xff0c;且&#xff0c;没有删除 重点提醒 当你的代码丢失时&#xff0c;不要惊慌&#xff0c;首先尝试使用本地的历史记录和远程仓库来找回代码。如果这些方法不起作用&#xff0c;你可以考虑其他的救援工具或寻…

搭建高可用OpenStack(Queen版)集群(十)之部署分布式存储Ceph

一、Ceph知识点学习 Ceph知识点学习&#xff1a;https://www.cnblogs.com/happy-king/p/9207509.html 二、部署分布式存储Ceph 一&#xff09;设置yum源 在全部控制与计算节点设置epel与ceph yum源 epel源&#xff1a;repo安装包下载_开源镜像站-阿里云 ceph源&#xff1a;cep…

在亚马逊云科技上利用生成式AI开发用户广告营销平台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何利用亚马逊云科技大模型托…