Java中多进程程序优先级的设定与使用

本文通过示例代码展示了Java中多线程的优先级设置及其对线程调度的影响,并验证了不同优先级下线程的执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       涉及到多线程,如果嵌入式处理时后我已经接触到的优先级问题,Java之中应该也是避免不了的。看了一下,Java中有针对多线程优先级的使用技术。

       为了验证,做一个对比使用,写一段使用默认优先级的代码如下:

public classPriorityDemo extends Thread

{

       PriorityDemo()

       {

       }

 

       PriorityDemo(String str)

       {

              super(str);

       }

 

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("***");

              }

       }

 

       public static void main(String args[])

       {

              TdDemo1 td1 = new TdDemo1();

              TdDemo2 td2 = new TdDemo2();

 

              td1.start();

              td2.start();

       }

}

 

class TdDemo1extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 1-" + i);

              }

       }

}

 

class TdDemo2extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 2-" + i);

              }

       }

}

       代码的编译运行结果如下:

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>javac PriorityDemo.java

 

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>java PriorityDemo

task demo 1-0

task demo 1-1

task demo 1-2

task demo 1-3

task demo 1-4

task demo 1-5

task demo 1-6

task demo 1-7

task demo 2-0

task demo 2-1

task demo 2-2

task demo 2-3

task demo 2-4

task demo 2-5

task demo 1-8

task demo 2-6

task demo 1-9

task demo 2-7

task demo 1-10

task demo 2-8

task demo 2-9

task demo 1-11

task demo 2-10

task demo 1-12

task demo 2-11

task demo 2-12

task demo 1-13

task demo 2-13

task demo 1-14

task demo 2-14

 

       接下来修改代码如下:

public classPriorityDemo extends Thread

{

       PriorityDemo()

       {

       }

 

       PriorityDemo(String str)

       {

              super(str);

       }

 

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("***");

              }

       }

 

       public static void main(String args[])

       {

              TdDemo1 td1 = new TdDemo1();

              TdDemo2 td2 = new TdDemo2();

 

              td1.setPriority(MIN_PRIORITY);

              td2.setPriority(MAX_PRIORITY);

 

              td1.start();

              td2.start();

       }

}

 

class TdDemo1extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 1-" + i);

              }

       }

}

 

class TdDemo2extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 2-" + i);

              }

       }

}

       代码的编译与执行结果如下:

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>javac PriorityDemo.java

 

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>java PriorityDemo

task demo 2-0

task demo 2-1

task demo 1-0

task demo 1-1

task demo 1-2

task demo 1-3

task demo 1-4

task demo 1-5

task demo 2-2

task demo 2-3

task demo 2-4

task demo 2-5

task demo 2-6

task demo 2-7

task demo 1-6

task demo 2-8

task demo 1-7

task demo 2-9

task demo 1-8

task demo 2-10

task demo 1-9

task demo 2-11

task demo 1-10

task demo 2-12

task demo 1-11

task demo 2-13

task demo 1-12

task demo 2-14

task demo 1-13

task demo 1-14

       虽说具体的情况难以看出但是从总体的执行结果可以看出一个趋势,那就是给了高优先级的td2的执行在整个过程中安排的更往前了一点。Java的优先级可以有10个优先级指定,但是在Windows系统中只能够支持3个。这是看教程的时候教程中提到的,为了看一下现在的情况是否有所改变,再次修改代码如下:

public classPriorityDemo extends Thread

{

       PriorityDemo()

       {

       }

 

       PriorityDemo(String str)

       {

              super(str);

       }

 

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("***");

              }

       }

 

       public static void main(String args[])

       {

              TdDemo1 td1 = new TdDemo1();

              TdDemo2 td2 = new TdDemo2();

 

              td1.setPriority(10);

              td2.setPriority(1);

 

              td1.start();

              td2.start();

       }

}

 

class TdDemo1extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 1-" + i);

              }

       }

}

 

class TdDemo2extends PriorityDemo

{

       public void run()

       {

              for(int i = 0; i < 15;i++)

              {

                     System.out.println("taskdemo 2-" + i);

              }

       }

}

       代码的编译与执行结果如下:

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>javac PriorityDemo.java

 

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\PriorityDemo>java PriorityDemo

task demo 1-0

task demo 1-1

task demo 1-2

task demo 1-3

task demo 2-0

task demo 2-1

task demo 2-2

task demo 2-3

task demo 2-4

task demo 2-5

task demo 2-6

task demo 2-7

task demo 1-4

task demo 2-8

task demo 1-5

task demo 2-9

task demo 1-6

task demo 2-10

task demo 1-7

task demo 2-11

task demo 1-8

task demo 1-9

task demo 1-10

task demo 2-12

task demo 2-13

task demo 1-11

task demo 2-14

task demo 1-12

task demo 1-13

task demo 1-14

       整个过程中并没有出现编译或者执行的问题,而且优先级的主要趋势在执行的结果中也基本能够得到验证。由此看来,现在Windows平台中的Java进程的优先级应该至少也有10级的级别使用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值