线程优先级

ID:19330 / 打印

主要概念:
java 中的每个线程都有一个关联的优先级,该优先级会影响该线程相对于其他正在运行的线程接收的 cpu 时间量。使用 setpriority(int level) 和 getpriority() 方法配置优先级。级别范围从 1 (min_priority) 到 10 (max_priority),默认为 5 (norm_priority)。

虽然优先级会影响调度,但资源锁和操作系统实现等其他因素也会影响执行。

代码解释
以下代码演示了如何配置和观察优先级的影响:

// demonstra as prioridades das threads. class priority implements runnable {     int count;     thread thrd;     static boolean stop = false;     static string currentname;      // construtor para criar uma nova thread     priority(string name) {         thrd = new thread(this, name);         count = 0;         currentname = name;     }      // define o comportamento da thread     public void run() {         system.out.println(thrd.getname() + " starting.");         do {             count++;             if (!currentname.equals(thrd.getname())) {                 currentname = thrd.getname();                 system.out.println("in " + currentname);             }         } while (!stop && count < 10000000);         stop = true; // interrompe outras threads ao alcançar 10.000.000         system.out.println(" " + thrd.getname() + " terminating.");     } }  class prioritydemo {     public static void main(string args[]) {         // cria duas threads com diferentes prioridades         priority mt1 = new priority("high priority");         priority mt2 = new priority("low priority");          // configura as prioridades         mt1.thrd.setpriority(thread.norm_priority + 2); // alta prioridade         mt2.thrd.setpriority(thread.norm_priority - 2); // baixa prioridade          // inicia as threads         mt1.thrd.start();         mt2.thrd.start();          try {             mt1.thrd.join();             mt2.thrd.join();         } catch (interruptedexception exc) {             system.out.println("main thread interrupted.");         }          // exibe os resultados         system.out.println(" high priority thread counted to " + mt1.count);         system.out.println("low priority thread counted to " + mt2.count);     } }  

程序中发生了什么?

具有不同优先级的线程:
线程 mt1 的优先级高于 mt2。
这意味着mt1有更大的机会访问cpu,但不是绝对保证。

计数循环和线程切换:
每个线程递增一个计数变量,直到达到 10,000,000。
如果一个线程先完成,静态变量 stop 会停止另一个线程。

交替观察:
当执行在线程之间切换时显示线程名称(currentname)。

优先级和结果:
在典型示例中,高优先级线程运行速度更快,达到 10,000,000 的目标,而其他线程则被中断。

示例输出

High Priority starting. In High Priority Low Priority starting. In Low Priority In High Priority High Priority terminating. Low Priority terminating.  High priority thread counted to 10000000 Low priority thread counted to 8183  

观察点:

  • 输出可能会因操作系统、系统负载和硬件而异。
  • 在多核系统上,优先级的影响可能不太明显,因为多个线程可以同时执行。

线程优先级

上一篇: NestJS vs Java/Spring: Exploring the Relationship Between Two Frameworks from Different Ecosystems
下一篇: Vertx 中的错误处理程序和失败处理程序

作者:admin @ 24资源网   2024-11-26

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。