1.10.2线程的优先级的规则性

测试

package com.cky.prioritydemo;

import java.util.Random;

/**
 * Created by edison on 2017/12/3.
 */
public class MyThread1 extends  Thread{
    @Override
    public void run() {
        super.run();
        long begin = System.currentTimeMillis();
        long addResult =0 ;
        for (int j = 0; j <10 ; j++) {
            for (int i = 0; i <50000 ; i++) {
                Random random = new Random();
                random.nextInt();
                addResult = addResult + 1;
            }
        }

        long end = System.currentTimeMillis();
        System.out.println("thread 1 use time="+(end-begin));
    }
}
 1 package com.cky.prioritydemo;
 2
 3 import java.util.Random;
 4
 5 /**
 6  * Created by edison on 2017/12/3.
 7  */
 8 public class MyThread2 extends  Thread{
 9     @Override
10     public void run() {
11         super.run();
12         long begin = System.currentTimeMillis();
13         long addResult =0 ;
14         for (int j = 0; j <10 ; j++) {
15             for (int i = 0; i <50000 ; i++) {
16                 Random random = new Random();
17                 random.nextInt();
18                 addResult = addResult + 1;
19             }
20         }
21
22         long end = System.currentTimeMillis();
23         System.out.println("thread 2 use time="+(end-begin));
24     }
25 }
package com.cky.prioritydemo;

/**
 * Created by edison on 2017/12/3.
 */
public class PriorityTest {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            MyThread1 th1 = new MyThread1();
            th1.setPriority(10);
            th1.start();
            MyThread2 th2 = new MyThread2();
            th2.setPriority(1);
            th2.start();
        }
    }
}
C:\itsoft\jdk\bin\java -Didea.launcher.port=7539 "-Didea.launcher.bin.path=C:\itsoft\idea\IntelliJ IDEA 2016.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\itsoft\jdk\jre\lib\charsets.jar;C:\itsoft\jdk\jre\lib\deploy.jar;C:\itsoft\jdk\jre\lib\ext\access-bridge-32.jar;C:\itsoft\jdk\jre\lib\ext\cldrdata.jar;C:\itsoft\jdk\jre\lib\ext\dnsns.jar;C:\itsoft\jdk\jre\lib\ext\jaccess.jar;C:\itsoft\jdk\jre\lib\ext\jfxrt.jar;C:\itsoft\jdk\jre\lib\ext\localedata.jar;C:\itsoft\jdk\jre\lib\ext\nashorn.jar;C:\itsoft\jdk\jre\lib\ext\sunec.jar;C:\itsoft\jdk\jre\lib\ext\sunjce_provider.jar;C:\itsoft\jdk\jre\lib\ext\sunmscapi.jar;C:\itsoft\jdk\jre\lib\ext\sunpkcs11.jar;C:\itsoft\jdk\jre\lib\ext\zipfs.jar;C:\itsoft\jdk\jre\lib\javaws.jar;C:\itsoft\jdk\jre\lib\jce.jar;C:\itsoft\jdk\jre\lib\jfr.jar;C:\itsoft\jdk\jre\lib\jfxswt.jar;C:\itsoft\jdk\jre\lib\jsse.jar;C:\itsoft\jdk\jre\lib\management-agent.jar;C:\itsoft\jdk\jre\lib\plugin.jar;C:\itsoft\jdk\jre\lib\resources.jar;C:\itsoft\jdk\jre\lib\rt.jar;C:\多线程核心技术\第一章\out\production\第一章;C:\itsoft\idea\IntelliJ IDEA 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.prioritydemo.PriorityTest
thread 1 use time=344
thread 1 use time=438
thread 1 use time=438
thread 1 use time=453
thread 1 use time=485
thread 2 use time=516
thread 2 use time=516
thread 2 use time=547
thread 2 use time=547
thread 2 use time=547

Process finished with exit code 0

高优先级的线程总是大部分先执行完,但不代表高优先级的线程全部先执行完,而且当线程的优先级等级差距很大时,谁先执行完和代码调用顺序无关,测试如下

 1 package com.cky.prioritydemo;
 2
 3 /**
 4  * Created by edison on 2017/12/3.
 5  */
 6 public class PriorityTest {
 7     public static void main(String[] args) {
 8         for (int i = 0; i < 5; i++) {
 9             MyThread1 th1 = new MyThread1();
10             th1.setPriority(1);
11             th1.start();
12             MyThread2 th2 = new MyThread2();
13             th2.setPriority(10);
14             th2.start();
15         }
16     }
17 }

C:\itsoft\jdk\bin\java -Didea.launcher.port=7541 "-Didea.launcher.bin.path=C:\itsoft\idea\IntelliJ IDEA 2016.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\itsoft\jdk\jre\lib\charsets.jar;C:\itsoft\jdk\jre\lib\deploy.jar;C:\itsoft\jdk\jre\lib\ext\access-bridge-32.jar;C:\itsoft\jdk\jre\lib\ext\cldrdata.jar;C:\itsoft\jdk\jre\lib\ext\dnsns.jar;C:\itsoft\jdk\jre\lib\ext\jaccess.jar;C:\itsoft\jdk\jre\lib\ext\jfxrt.jar;C:\itsoft\jdk\jre\lib\ext\localedata.jar;C:\itsoft\jdk\jre\lib\ext\nashorn.jar;C:\itsoft\jdk\jre\lib\ext\sunec.jar;C:\itsoft\jdk\jre\lib\ext\sunjce_provider.jar;C:\itsoft\jdk\jre\lib\ext\sunmscapi.jar;C:\itsoft\jdk\jre\lib\ext\sunpkcs11.jar;C:\itsoft\jdk\jre\lib\ext\zipfs.jar;C:\itsoft\jdk\jre\lib\javaws.jar;C:\itsoft\jdk\jre\lib\jce.jar;C:\itsoft\jdk\jre\lib\jfr.jar;C:\itsoft\jdk\jre\lib\jfxswt.jar;C:\itsoft\jdk\jre\lib\jsse.jar;C:\itsoft\jdk\jre\lib\management-agent.jar;C:\itsoft\jdk\jre\lib\plugin.jar;C:\itsoft\jdk\jre\lib\resources.jar;C:\itsoft\jdk\jre\lib\rt.jar;C:\多线程核心技术\第一章\out\production\第一章;C:\itsoft\idea\IntelliJ IDEA 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.prioritydemo.PriorityTest
thread 2 use time=297
thread 2 use time=313
thread 2 use time=328
thread 1 use time=438
thread 2 use time=485
thread 1 use time=485
thread 2 use time=500
thread 1 use time=500
thread 1 use time=516
thread 1 use time=516

Process finished with exit code 0

结果分析:大部分挺好read先执行完,说明线程的优先级具有一定的规则性,也就是cpu进行执行优先级高得线程

时间: 2024-10-09 14:25:00

1.10.2线程的优先级的规则性的相关文章

三、java多线程核心技术(笔记)——线程的优先级

概论: 在操作系统中,线程可以划分优先级,优先级高的获得的CPU资源较多,也就是CPU优先执行优先级较高的线程.在JAVA中线程的优先级 分1~~10个10个等级.大于或者小于会报异常. 一.线程优先级具有继承性 A 线程启动 B线程,则线程B的优先级与A的是一样的.. public class MyThread1 extends Thread { @Override public void run() { System.out.println("MyThread1 run priority=&

Java多线程系列--“基础篇”10之 线程优先级和守护线程

概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479982.html 1. 线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程

Java 并发 线程的优先级

Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于某些原因不执行的时候,低优先级的线程才可能被执行 2.两个优先级相同的线程同时等待执行时,那么运行系统会以round-robin的方式选择一个线程执行(即轮询调度,以该算法所定的)(Java的优先级策略是抢占式调度!) 3.被选中的线程可因为一下原因退出,而给其他线程执行的机会: 1) 一个更高优先

java 多线程4: java线程的优先级

Java线程的优先级取值范围是1 (Thread.MIN_PRIORITY ) 到 10 (Thread.MAX_PRIORITY ).如果没有设置, 线程默认的优先级是NORM_PRIORITY.这个值是5. getPriority()和setPriority(int newPriority) 是实例方法 这两个方法用于获取和设置线程的优先级,优先级高的CPU得到的CPU资源比较多,设置优先级有助于帮"线程规划器"确定下一次选择哪一个线程优先执行.换句话说,两个在等待CPU的线程,优

java 22 - 6 多线程之线程调度和设置线程的优先级

线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调度模型: 分时调度模型 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片 抢占式调度模型 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些. Java使用的是抢占式调度模型. 既然线程设有设置优先级,

java多线程之线程的优先级

在操作系统中,线程可以划分优先级,优先级较高的线程得到CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务(其实并不是这样). 在java中,线程的优先级用setPriority()方法就行,线程的优先级分为1-10这10个等级,如果小于1或大于10,则抛出异常throw new IllegalArgumentException(),默认是5. public class MyThread1 extends Thread { @Override public void run() {

JAVA中的多线程(八):线程的优先级和yield方法

优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runnable 2 { 3 public void run() 4 { 5 for(int x = 0; x < 70; x++) 6 { 7 System.out.println(Thread.currentThread().toString()+"..."+x); 8 Thread.yield(); 9 } 10 } 11 } 12 13 c

Java多线程编程(三)线程的优先级、同步与死锁

线程的优先级: 线程的优先级分为三种,分别是: 1-MIN_PRIORITY 10-MAX_PRIORITY 5-NORM_PRIORITY 如果什么都不设置默认值是5 线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响.在默认状态下(比如说主线程)它的默认值是5 具体代码演示: package com.yeqc.thread; class ThRun implements Runnable{ @Override public void run() { for(int i

Windows内核之线程的调度,优先级,亲缘性

1 调度 Windows不是实时操作系统,它是抢占式多线程操作系统.在假设所有优先级相同的情况下,CPU对线程的调度原则是每隔20m就会切换到下一个线程,根据Context中的IP和SP来接着执行上次的东西.Windows永远不会让1个线程去独占一段时间. 2 可调度性 系统只调用可以调度的线程,其实系统的大部分线程都是处于不可调度的状态,要么处于暂停的状态,要么处于休眠的状态. 3 线程的暂停和恢复 <1>在CreateThread的时候通过制定CREATE_SUSPENDED来让线程暂停执