A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _code 中级黑马   /  2014-9-9 11:33  /  1652 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class TestPriority {
        public static void main(String args[]){
                Thread t1 = new Thread (new T1());//定义一个新对象t1;
                Thread t2 = new Thread (new T2());//定义一个新对象t2;
                t1.setPriority(Thread.NORM_PRIORITY +5);//设置t1的优先级别加5
                t1.start();//启动线程t1
                t2.start();//启动线程t2
        }
       

}

class T1 implements Runnable{//实现接口Runnable;
        public void run(){
                for(int i = 0 ; i<1000 ; i++){
                        System.out.println("T1:"+i);
                }
        }
}
class T2 implements Runnable {//实现接口Runnable;
        public void run(){
                for(int i = 0; i<1000;i++){
                        System.out.println("T2:"+i);
                }
        }
}


T2:0
T1:0
T1:1
T2:1

T1:2
。。。。以下省略N多执行
为什么第一个数 是先执行T2: 0呢 ,难道不是先执行 T1 :0么?

13 个回复

倒序浏览
的确有点奇怪,能是 t1.setPriority(Thread.NORM_PRIORITY +5);没有执行完,后面的就获取到cpu的执行权吗
回复 使用道具 举报
为什么T2不能先执行呢?
不要理解错了。
T2优先级高不是代表每次运行程序 T2都会先运行,而是代表 运行次数多了,T2的运行频率高于T1运行频率。
回复 使用道具 举报
付江涛 发表于 2014-9-9 12:04
为什么T2不能先执行呢?
不要理解错了。
T2优先级高不是代表每次运行程序 T2都会先运行,而是代表 运行次数 ...

版大正解。优先级代表的是被CPU选中执行的概率,而非优先执行的保证。同样,yield方法也不是说一定会让出执行权,只是建议CPU去执行其他线程,CPU听不听是不一定的。而且,也不是说你在Java程序中设置的优先级越高,被CPU选中的概率就一定越高。因为JVM最终要依靠操作系统的优先级调度机制,而Java的优先级级别和操作系统的优先级级别之间不存在一一对应。

评分

参与人数 1黑马币 +5 收起 理由
付江涛 + 5 惊现大神!

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2014-9-9 12:11
版大正解。优先级代表的是被CPU选中执行的概率,而非优先执行的保证。同样,yield方法也不是说一定会让出 ...

难道第一个按顺序执行下来 ,  第一次也不是先执行T1 么, 不是前面的语句优先执行一下吗?
回复 使用道具 举报
_code 发表于 2014-9-9 16:57
难道第一个按顺序执行下来 ,  第一次也不是先执行T1 么, 不是前面的语句优先执行一下吗? ...

这个优先级高 ,执行概率大 我也明白 , 但是  第一个 执行的是T2 : 0  ,有点迷惑。
回复 使用道具 举报
既然是概率,肯定会出现先执行T2的情况,运行一次说明不了问题,多运行几次还是T1先执行的情况多。
回复 使用道具 举报 1 0
孤鸢 发表于 2014-9-9 17:21
既然是概率,肯定会出现先执行T2的情况,运行一次说明不了问题,多运行几次还是T1先执行的情况多。 ...

哦, 了解了,多谢仁兄  ,  原来应用了优先级 之后 ,输出顺序就完全 按照概率来了  , 以前没理解到位,刚刚 运行了10 次 ,完全说明了问题,多谢!
回复 使用道具 举报
_code 发表于 2014-9-9 17:26
哦, 了解了,多谢仁兄  ,  原来应用了优先级 之后 ,输出顺序就完全 按照概率来了  , 以前没理解到位 ...

哈哈,共同进步
回复 使用道具 举报
fouraa 来自手机 中级黑马 2014-9-9 18:04:51
10#
继续学习!!
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-9-9 18:34:04
11#
优先级高  仅指的是线程在分配cpu资源时具有优先权,其它资源(如打印机)对所有线程是一样的,执行一段程序需要使用多种资源,所以CPU资源优先执行并不代表就一定能优先的执行完成。
回复 使用道具 举报
_code 发表于 2014-9-9 16:57
难道第一个按顺序执行下来 ,  第一次也不是先执行T1 么, 不是前面的语句优先执行一下吗? ...

启动线程不等于执行线程。启动线程相当于你说“我也要参加抽奖”,但是第一个抽到谁,不一定
回复 使用道具 举报
fantacyleo 发表于 2014-9-9 20:35
启动线程不等于执行线程。启动线程相当于你说“我也要参加抽奖”,但是第一个抽到谁,不一定 ...

多            谢!
回复 使用道具 举报
路过学习~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马