Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在线程对象上调用start时,线程上设置的优先级无效_Java_Multithreading - Fatal编程技术网

Java 在线程对象上调用start时,线程上设置的优先级无效

Java 在线程对象上调用start时,线程上设置的优先级无效,java,multithreading,Java,Multithreading,我执行了以下代码: public class TestMain extends Thread{ public static Runnable getRunnableObject(){ Runnable r = new Runnable(){ @Override public void run() { System.out.println("inside runnable");

我执行了以下代码:

public class TestMain extends Thread{

    public static Runnable getRunnableObject(){
        Runnable r = new Runnable(){
            @Override
            public void run() {
                System.out.println("inside runnable");
            }
        };

        return r;           
    }

    public static void main(String args[]){
        Thread t2 = new Thread(getRunnableObject());
    //  t2.start();
        System.out.println("name "+t2.getName()+" id "+t2.getPriority()+" class "+t2.getClass()
                +" priortity "+t2.getPriority()+" state "+t2.getState()+" alive/dead "+t2.isAlive());

        System.out.println("runtime"+Runtime.getRuntime().availableProcessors());
        t2.setPriority(MAX_PRIORITY);
        System.out.println(t2.getPriority());

        t2.setPriority(MIN_PRIORITY);
        System.out.println(t2.getPriority());

        t2.setPriority(NORM_PRIORITY);
        System.out.println(t2.getPriority());
    }
}
输出:

name Thread-0 id 5 class class java.lang.Thread priortity 5 state NEW alive/dead false
runtime4
10
1
5
现在我再次运行它,取消第22行的代码注释

产出2:

inside runnable
name Thread-0 id 5 class class java.lang.Thread priortity 5 state RUNNABLE alive/dead true
runtime4
5
5
5
当我在线程上调用start()时,您能告诉我为什么设置优先级不起作用吗?

这是一个争用条件

当您试图设置
t2
的优先级时,它已经死了。 如果将
Runnable
更改为阻塞一段时间,如下所示:

Runnable r = new Runnable() {

    @Override
    public void run() {
        System.out.println("inside runnable");
        try {
            Thread.sleep(100000);
        } catch (InterruptedException e) {
           //
        }
    }
}

然后你会得到10,1,5的相同序列。

Ah。。我明白了。我还尝试在设置优先级和状态被打印为“新”之间打印状态。