首页 > 解决方案 > 关于java中setPriority()方法的问题

问题描述

我编写了一个程序来了解线程是如何工作的。该程序有一个包和三个类。 包和类

类的主体是:

    public void print() {
        Thread t = Thread.currentThread();
        for(int i=0; i<5; i++) {
            try {
            System.out.println("Name : "+t.getName()+" Priority : "+
            +t.getPriority()+" prints : "+i  );
            t.sleep(2000);
            System.out.println(t.getName()+ " Priority : "+t.getPriority()+"  ***************");
            }
            catch(Exception e) {}
        }   
    }       

}
package thread;

public class ThreadMethods extends Thread {
    public void run() {
        Code p = new Code();
        p.print();
    }

}
package thread;

public class Main {

    public static void main(String[] args) {
        ThreadMethods t1 = new ThreadMethods();
        ThreadMethods t2 = new ThreadMethods();
        ThreadMethods t3 = new ThreadMethods();
        t1.setName("t1");
        t2.setName("t2");
        t3.setName("t3");
        t1.setPriority(10);
        t2.setPriority(5);
        t3.setPriority(1);
        System.out.println("for Thread t1 : "+" Id = "
                +t1.getId()+" Name = "+t1.getName()+" Priority : "
                +t1.getPriority());
        System.out.println("for Thread t2 : "+" Id = "
                +t2.getId()+" Name = "+t2.getName()+" Priority : "
                +t2.getPriority());
        System.out.println("for Thread t3 : "+ "Id = "
                +t3.getId()+" Name = "+t3.getName()+" Priority : "
                +t3.getPriority());
        t1.start();
        t2.start();
        t3.start();

    }

}

但它有一个意外的输出: output_1-1

输出_1-2

正如您所观察到的,我为每个线程设置了一个优先级。但是它们的执行与它们的优先级无关。例如,我希望在线程休眠后,线程 t1 唤醒并打印星星。但是具有最低优先级的线程 t3 打印星星。为什么会这样?

标签: javamultithreadingthread-sleep

解决方案


推荐阅读