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

python 做网站合适吗网站的命名规则

python 做网站合适吗,网站的命名规则,试玩平台网站开发,wordpress安装完成Java多线程实现顺序执行 在 Java 编程里,多线程是一项强大的特性,它允许程序同时执行多个任务,从而提升程序的性能和响应能力。不过,有时候我们希望多个线程能够按照特定的顺序依次执行,而不是并发地随机执行。这篇博…

Java多线程实现顺序执行

在 Java 编程里,多线程是一项强大的特性,它允许程序同时执行多个任务,从而提升程序的性能和响应能力。不过,有时候我们希望多个线程能够按照特定的顺序依次执行,而不是并发地随机执行。这篇博客会为 Java 详细介绍几种按意愿依次执行线程的方法。

1. 线程顺序执行的概念

正常情况下,Java 中的线程一旦启动,就会在操作系统的调度下并发执行,它们的执行顺序是不确定的。但在某些场景中,我们需要保证线程按照特定的顺序依次执行,比如线程 A 执行完之后线程 B 才能执行,线程 B 执行完之后线程 C 才能执行。

2.多线程中两种特殊的优先级设置方法

Java多线程库中有yield() 方法和 setPriority() 方法可以用于尝试控制线程的执行顺序。不过需要注意的是,yield()setPriority() 并不能严格保证线程按意愿依次执行,它们只是给线程调度器提供一些建议。这里先简单介绍一下这两种方法的使用

2.1.yield方法

yield()Thread 类的一个静态方法,当一个线程调用 yield() 方法时,它会告诉线程调度器自己愿意让出当前的 CPU 执行权,让其他具有相同优先级的线程有机会执行。但这只是一个建议,线程调度器可能会忽略这个建议,继续让当前线程执行。下面这段代码将t1设置为礼让线程,但是实际执行时,输出结果大多还是Thread 1,效果很不明显

public class Test01 {public static void main(String[] args) {Thread t1 = new Thread(() -> {Thread.yield();System.out.println("Thread 1");});Thread t2 = new Thread(() -> {System.out.println("Thread 2");});Thread t3 = new Thread(() -> {System.out.println("Thread 3");});t1.start();t2.start();t3.start();}
}

2.2.setPriority方法

setPriority()Thread 类的一个实例方法,用于设置线程的优先级。线程的优先级范围是 1 到 10,其中 1 是最低优先级,10 是最高优先级,默认优先级是 5。线程调度器会倾向于让优先级高的线程先执行,但这也不是绝对的。下面这段代码将t1线程优先级设为最低,但是实际执行时,t1线程仍然经常第一个执行,效果同样不是很明显

public class Test01 {public static void main(String[] args) {Thread t1 = new Thread(() -> {System.out.println("Thread 1");});Thread t2 = new Thread(() -> {System.out.println("Thread 2");});Thread t3 = new Thread(() -> {System.out.println("Thread 3");});t1.setPriority(Thread.MIN_PRIORITY);t1.start();t2.start();t3.start();}
}

3. 使用 join() 方法

3.1 join() 方法的原理

join() 方法是 Thread 类的一个实例方法。当在一个线程中调用另一个线程的 join() 方法时,当前线程会被阻塞,直到被调用 join() 方法的线程执行完毕。也就是说,A线程等待B线程执行完毕,就需要在A线程中令B线程调用join方法

3.2 示例代码

public class Main {public static void main(String[] args) {Thread t1 = new Thread(() -> {System.out.println("Thread 1");});Thread t2 = new Thread(() -> {try {t1.join();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("Thread 2");});Thread t3 = new Thread(() -> {try {t2.join();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("Thread 3");});t1.start();t2.start();t3.start();}
}

这段代码就可以实现严格控制线程的执行,无论执行多少次,永远都是线程t1,t2,t3依次执行。

4. 使用线程锁(synchronized

对于线程锁实现多线程的顺序执行,我们先直接看代码

4.1.示例代码

public class OrderedExecution {private static final Object lock = new Object();private static int current = 1; // 控制执行顺序的状态变量public static void main(String[] args) {Thread t1 = new Thread(() -> {synchronized (lock) {while (current != 1) {  // 检查是否轮到自己执行try {lock.wait();    // 不是则等待} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程1执行");current = 2;           // 更新状态变量lock.notifyAll();      // 唤醒其他线程}});Thread t2 = new Thread(() -> {synchronized (lock) {while (current != 2) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程2执行");current = 3;lock.notifyAll();}});Thread t3 = new Thread(() -> {synchronized (lock) {while (current != 3) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程3执行");current = 1;lock.notifyAll();}});t1.start();t2.start();t3.start();}
}

4.2.代码解析

先通过current变量(初始值为1)明确标记当前应执行的线程序号

在每个线程进入同步块后,会循环检查current是否匹配自己的序号,不匹配则调用wait()释放锁并等待

执行完的线程会更新current并调用notifyAll(),确保只有下一个序号对应的线程能通过条件检查

需要注意的是,这里的wait不能用sleep方法代替,因为sleep方法在睡眠时不会释放锁,从而导致死锁的形成

5. 总结

本文介绍了两种在 Java 中按意愿依次执行线程的方法:join() 方法和 线程锁synchronizedjoin() 方法是最简单的实现多线程顺序执行的方法,适合线程数量较少的场景;synchronized 则更灵活,适用于复杂的线程协作场景。除此之外,还有CountDownLatch,单线程线程池等常用方法可以实现多线程的顺序执行, 通过这些方法,可以更好地控制线程的执行顺序,编写出更稳定、可靠的多线程程序。

http://www.dtcms.com/a/404267.html

相关文章:

  • 网站开发与设计实训报告1000字网站如何做百度权重
  • C++ 容器学习系列|vector 核心知识全解析,铺垫下一期模拟实现
  • 专业郑州做网站的公司专业展示设计网站
  • 深入解析 Stack 布局:原理、实战与优化指南
  • 如何搭建钓鱼网站运城做网站费用高吗
  • 17网做网站在线视频网站开发方案php
  • 深入理解Java AQS机制:从原理到源码解析
  • 网站建设与推广好做吗简单的网页设计作品html
  • asp.net 4.0网站开发 下载w10怎么做信任网站
  • 网站开发项目团队人员交互设计师网站
  • 中心网站建设方法网站出现404
  • 网站制作方案怎么写垂直型电商网站如何做
  • 了解交换机,集线器,中继器,路由器
  • 凡科建站微信小程序wordpress php sqlite
  • 济南建设工程交易中心网站上海专业网站建设
  • 探究ContentProvider(一)
  • h5网站开发模板搜索引擎优化包括哪些内容
  • VMware+RockyLinux+ikuai+docker+cri-docker+k8s 自用 实践笔记(一)
  • 做网站个人怎么签合同iis怎么加载网站
  • 深圳荷坳网站建设公司wordpress文章多个分类显示不出来
  • 拼多多网站首页套模板做网站流程
  • 字符串及正则表达式
  • 成都公司做网站多少钱马云是做网站的
  • 如何将自己做的网站江门网站制作报价
  • tensorrt安装 2025
  • 营销型企业网站建设方案旅游网站的网页设计
  • 医疗养生管理系统(AI问答、WebSocket及时通讯、Echarts图形化分析)
  • D触发器、JK触发器以及单稳态触发器、非稳态多谐振荡器在 XPU 设计中的使用情况
  • 没有网站可以做seo吴忠市建设局官方网站
  • 网站首页布局设计教程辽宁建设科技信息网网站