• 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:itsoftjdkinjava -Didea.launcher.port=7539 "-Didea.launcher.bin.path=C:itsoftideaIntelliJ IDEA 2016.3.3in" -Dfile.encoding=UTF-8 -classpath "C:itsoftjdkjrelibcharsets.jar;C:itsoftjdkjrelibdeploy.jar;C:itsoftjdkjrelibextaccess-bridge-32.jar;C:itsoftjdkjrelibextcldrdata.jar;C:itsoftjdkjrelibextdnsns.jar;C:itsoftjdkjrelibextjaccess.jar;C:itsoftjdkjrelibextjfxrt.jar;C:itsoftjdkjrelibextlocaledata.jar;C:itsoftjdkjrelibext
    ashorn.jar;C:itsoftjdkjrelibextsunec.jar;C:itsoftjdkjrelibextsunjce_provider.jar;C:itsoftjdkjrelibextsunmscapi.jar;C:itsoftjdkjrelibextsunpkcs11.jar;C:itsoftjdkjrelibextzipfs.jar;C:itsoftjdkjrelibjavaws.jar;C:itsoftjdkjrelibjce.jar;C:itsoftjdkjrelibjfr.jar;C:itsoftjdkjrelibjfxswt.jar;C:itsoftjdkjrelibjsse.jar;C:itsoftjdkjrelibmanagement-agent.jar;C:itsoftjdkjrelibplugin.jar;C:itsoftjdkjrelib
    esources.jar;C:itsoftjdkjrelib
    t.jar;C:多线程核心技术第一章outproduction第一章;C:itsoftideaIntelliJ IDEA 2016.3.3libidea_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:itsoftjdkinjava -Didea.launcher.port=7541 "-Didea.launcher.bin.path=C:itsoftideaIntelliJ IDEA 2016.3.3in" -Dfile.encoding=UTF-8 -classpath "C:itsoftjdkjrelibcharsets.jar;C:itsoftjdkjrelibdeploy.jar;C:itsoftjdkjrelibextaccess-bridge-32.jar;C:itsoftjdkjrelibextcldrdata.jar;C:itsoftjdkjrelibextdnsns.jar;C:itsoftjdkjrelibextjaccess.jar;C:itsoftjdkjrelibextjfxrt.jar;C:itsoftjdkjrelibextlocaledata.jar;C:itsoftjdkjrelibext ashorn.jar;C:itsoftjdkjrelibextsunec.jar;C:itsoftjdkjrelibextsunjce_provider.jar;C:itsoftjdkjrelibextsunmscapi.jar;C:itsoftjdkjrelibextsunpkcs11.jar;C:itsoftjdkjrelibextzipfs.jar;C:itsoftjdkjrelibjavaws.jar;C:itsoftjdkjrelibjce.jar;C:itsoftjdkjrelibjfr.jar;C:itsoftjdkjrelibjfxswt.jar;C:itsoftjdkjrelibjsse.jar;C:itsoftjdkjrelibmanagement-agent.jar;C:itsoftjdkjrelibplugin.jar;C:itsoftjdkjrelib esources.jar;C:itsoftjdkjrelib t.jar;C:多线程核心技术第一章outproduction第一章;C:itsoftideaIntelliJ IDEA 2016.3.3libidea_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进行执行优先级高得线程

  • 相关阅读:
    mysql 系统表的作用
    从事务隔离级别谈到Hibernate乐观锁,悲观锁
    python 模拟登陆,请求包含cookie信息
    Python入门介绍
    mysql中设置小数
    分割png图片
    ubuntu 14.04 安装win7虚拟机
    rwx
    获取文件名称 basename 用法
    like tp
  • 原文地址:https://www.cnblogs.com/edison20161121/p/7954797.html
Copyright © 2020-2023  润新知