当前位置: 首页 > 编程笔记 >

Java 多线程优先级实例详解

施华奥
2023-03-14
本文向大家介绍Java 多线程优先级实例详解,包括了Java 多线程优先级实例详解的使用技巧和注意事项,需要的朋友参考一下

Java 多线程优先级实例详解

线程的优先级将该线程的重要性传递给调度器。尽管CPU处理现有线程集的顺序是不确定的,但是调度器将倾向于让优先权最高的线程先执行。

你可以用getPriority()来读取现有线程的优先级,并且在任何时刻都可以通过setPriority()来修改优先级。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SimplePriorities implements Runnable {

  private int countDown = 5;

  /*Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,
  为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。
  Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,
  java线程内存模型确保所有线程看到这个变量的值是一致的。*/
  private volatile double d;
  private int priority;

  public SimplePriorities(int priority){
    this.priority = priority;
  }

  public String toString(){
    //获取当前线程信息
    return Thread.currentThread() + ":" + countDown;
  }

  @Override
  public void run() {
    //设置线程优先级 1-10
    Thread.currentThread().setPriority(priority);

    while(true){

      for(int i = 0;i<100000;i++){
        d += (Math.PI + Math.E) / (double)i;
        if(i00 == 0){
          Thread.yield();
        }
      }
      System.out.println(this.toString());

      if(--countDown == 0)return;

    }

  }

  public static void main(String[] args) {


    ExecutorService exec = Executors.newCachedThreadPool();

    //优先级为1
    exec.execute(new SimplePriorities(Thread.MIN_PRIORITY));
    //优先级为10
    exec.execute(new SimplePriorities(Thread.MAX_PRIORITY));

    exec.shutdown();
  }

}

toString()方法被覆盖,以便使用Thread.toString()方法来打印线程的名称,线程的优先级以及线程所属的“线程组”。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍Java 线程优先级详解及实例,包括了Java 线程优先级详解及实例的使用技巧和注意事项,需要的朋友参考一下 Java 线程优先级详解及实例 操作系统基本采用时分的调度运行线程,操作系统会分出一个个时间片,线程会被分配到若干个时间片,当线程的时间片用完了就会发生线程调度,并且等待着下次调度,线程被分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程优先级就是决定线程能够分配多

  • 本文向大家介绍java线程优先级原理详解,包括了java线程优先级原理详解的使用技巧和注意事项,需要的朋友参考一下 java 中的线程优先级的范围是1~10,默认的优先级是5。10最高。 MIN_PRIORITY 1 MAX_PRIORITY 10 NORM_PRIORITY 5 优先级高的获得cpu的几率更大些,不是优先级高的就先执行完,线程优先级随机特性 在java中,线程的优先级具有继承性,

  • 主要内容:1 什么是Java 线程优先级,2 Thread类线程优先级常量,3 Java 线程优先级的例子1 什么是Java 线程优先级 每个线程都有一个优先级。优先级由1到10之间的数字表示。在大多数情况下,线程计划会根据线程的优先级来调度线程(称为抢先式调度)。但是不能保证一定被调用,因为是否被调用取决于JVM选择谁来调度。 2 Thread类线程优先级常量 public static int MIN_PRIORITY public static int NORM_PRIORITY publ

  • 问题内容: Java API线程优先级(1-10)如何转换为操作系统级别的优先级,因为大多数操作系统没有与此相匹配的线程优先级别(就数量而言)。 因此请记住,在某些情况下,具有不同优先级的两个或多个线程最终会在OS级别获得相同的优先级。 如果我的理解有需要更正,请澄清。 问题答案: 实际上,某些优先级可以映射到相同的“本地”优先级。这是列表(基于OpenJDK 6中的Hotspot代码): Sol

  • 问题内容: 这是关于线程优先级的测试。该代码来自《 Thinking in Java p.809》 我不知道为什么我不能得到像这样的常规结果: 但是结果是随机的(每次运行时都会改变): 我在Win 7 64位JDK 7中使用i3-2350M 2C4T CPU,这有关系吗? 问题答案: Java线程优先级无效 线程优先级是高度特定于操作系统的,并且在许多操作系统上的影响通常很小。优先级有助于仅对运行

  • 问题内容: 我有一个在几个线程中运行的程序。主线程与其他线程共享一个对象,在主线程中,我需要调用: 我怀疑主线程饿了,无法访问。如何提高主线程的优先级,或者默认情况下它是否已高于其他线程? 问题答案: 您在Thread类中有一个setPriority()方法。 检查此javadoc。 将线程优先级设置为最大: