java中主java线程优先级具有什么优先级

> Java多线程 - 线程的优先级
Java多线程 - 线程的优先级
hanchanhihi & &
发布时间: & &
浏览:10 & &
回复:0 & &
悬赏:0.0希赛币
Java多线程 -- 线程的优先级
  Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的“线程优先级的问题“)。
优先级的取值
  Java线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY
) - 10 (Thread.MAX_PRIORITY
  Thread源代码里对NORM_PRIORITY (数值为5) 的注释是“线程默认的优先级”
* The default priority that is assigned to a thread.
public final static int NORM_PRIORITY = 5;
  其实不然。默认的优先级是父线程的优先级。在init方法里,
  Thread parent = currentThread();
this.priority = parent.getPriority();
  或许这么解释是因为Java程序的主线程(main方法)的优先级默认是为NORM_PRIORITY,这样不主动设定优先级的,后续创建的线程的优先级也都是NORM_PRIORITY了。
  public static void main(String[] args) {
System.out.println(Thread.currentThread().getPriority());
  其执行结果是5。
设置优先级
  可以通过setPriority方法(final的,不能被子类重载)更改优先级。优先级不能超出1-10的取值范围,否则抛出IllegalArgumentException。另外如果该线程已经属于一个线程组(ThreadGroup),该线程的优先级不能超过该线程组的优先级:
  if (newPriority & MAX_PRIORITY || newPriority & MIN_PRIORITY) {
throw new IllegalArgumentException();
if((g = getThreadGroup()) != null) {
if (newPriority & g.getMaxPriority()) {
newPriority = g.getMaxPriority();
setPriority0(priority = newPriority);
  其中setPriority0是一个本地方法。
线程组的最大优先级
  我们可以设定线程组的最大优先级,当创建属于该线程组的线程时该线程的优先级不能超过这个数。
  线程组最大优先级的设定:
系统线程组的最大优先级默认为Thread.MAX_PRIORITY
创建线程组的时候其最大优先级默认为父线程组(如果未指定父线程组,则其父线程组默认为当前线程所属线程组)的最大优先级
可以通过setMaxPriority更改最大优先级,但无法超过父线程组的最大优先级
  setMaxPriority的问题:
该方法只能更改本线程组及其子线程组(递归)的最大优先级。
但不能影响已经创建的直接或间接属于该线程组的线程的优先级,也就是说,即使目前有一个子线程的优先级比新设定的线程组优先级大,也不会更改该子线程的优先级。只有当试图改变子线程的优先级或者创建新的子线程的时候,线程组的最大优先级才起作用。
线程优先级的问题
  以下内容摘抄、翻译自JAVAMEX -& Java threading introduction -& Thread priorioties
  对于线程优先级,我们需要注意:
* Thread.setPriority()可能根本不做任何事情,这跟你的操作系统和虚拟机版本有关
* 线程优先级对于不同的线程调度器可能有不同的含义,可能并不是你直观的推测。特别地,优先级并不一定是指CPU的分享。在UNIX系统,优先级或多或少可以认为是CPU的分配,但Windows不是这样
线程的优先级通常是全局的和局部的优先级设定的组合。Java的setPriority()方法只应用于局部的优先级。换句话说,你不能在整个可能的范围
内设定优先级。(这通常是一种保护的方式,你大概不希望鼠标指针的线程或者处理音频数据的线程被其它随机的用户线程所抢占)
* 不同的系统有不同的线程优先级的取值范围,但是Java定义了10个级别(1-10)。这样就有可能出现几个线程在一个操作系统里有不同的优先级,在另外一个操作系统里却有相同的优先级(并ation = window.
source_url = location.protocol + "//" + location.host + location.pathname + location.
source_url += "#" + comment.
pre.writeAttribute('codeable_id', post_id);
pre.writeAttribute('codeable_type', "BlogComment");
pre.writeAttribute('source_url', source_url);
pre.writeAttribute('pre_index', index);
pre.writeAttribute('title', 'Java多线程 -- 线程的优先级');
code_favorites_init();
fix_image_size($$('div.blog_content img'), 700);
function quote_comment(id) {
new Ajax.Request('/editor/quote', {
parameters: {'id':id, 'type':'BlogComment'},
onSuccess:function(response){editor.bbcode_editor.textarea.insertAfterSelection(response.responseText);
Element.scrollTo(editor.bbcode_editor.textarea.element);}
new WeiboShare({share_buttons: $('share_weibo'), img_scope: $('blog_content')});
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&>&&>&&>&&>&线程优先级|java线程优先级
线程优先级|java线程优先级
上传大小:2KB
* &p&Title: 提高线程优先级&/p&
* &p&Description: 通过修改线程的优先级,是线程获得优先处理。&/p&
* &p&Copyright: Copyright (c) 2003&/p&
* &p&Filename: upPRIThread.java&/p&
* @author * @version 1.0...展开收缩
综合评分:4.3(7位用户评分)
所需积分:3
下载次数:16
审核通过送C币
创建者:zhangguo5
创建者:jerryshen
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
线程优先级|java线程优先级
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
shangshufa
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:> 问题详情
(13 )在 Java 程序中,主线程一般具有 【 13 】 优先级。
悬赏:0&答案豆
提问人:匿名网友
发布时间:
(13 )在 Java 程序中,主线程一般具有 【 13 】 优先级。请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1( 14 )当实现 Runnable 接口时,要实现的方法是 【 14 】 。2( 15 ) mouseDragged() 方法是 MouseMotionListener 接口中的抽象方法,该方法的参数是 【 15 】 类。
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
享三项特权
享三项特权
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
常用邮箱:
用于找回密码
确认密码:Java 线程优先级
概要:每个线程都有一个“优先级”,优先级可以用整数表示,取值范围为0~10,0为最低优先级,10为最高优先级,当决定哪个线程需要调度时,首先查看是否存在优先级高的可调度线程,如果存在,就从中选择进行调度。当该线程的时间片到达之后,系统查看是否存在另一个优先级为比较高的可调度线程,如果存在就调度。这样依次进行判断调度线程。本实例利用三种方式实现线程的优先级排列家族的等级。
实现线程优先级的技术要点如下:Thread类有三个优先级静态常量:MAX_PRIORITY取值是10,为线程最高优先级;MIN_PRIORITY取值是1,为线程最低优先级;NORM_PRIORITY取值是5。为线程中间位置的优先级。默认情况下,线程的优先级为NORM_PRIORITY。Java中的线程在同等情况下,对于两个同时启动的线程,优先级高的线程先获取CPU资源,先被真正运行,优先级低的线程后获取CPU资源,后被执行。对于两个同时启动的线程,大多数情况下优先级高的线程会比优先级低的线程先运行,但也有例外情况,完全取决于Java虚拟机的调度。代码实现package net.xsoftlab.
class OneFamilyThread implements Runnable { // 线程实现接口Runnable
T // 声明一个线程
OneFamilyThread() {
} // 默认构造方法
OneFamilyThread(String name) { // 构造方法初始一个线程
thread = new Thread(this, name);
public void run() {
System.out.println("家族人员:" + thread.getName()); // 获得线程的名称
public void startThreadByLevel() { // 按优先级执行线程
OneFamilyThread o1 = new OneFamilyThread("爷爷");// 创建线程对象并命名
OneFamilyThread o2 = new OneFamilyThread("奶奶");
OneFamilyThread o3 = new OneFamilyThread("爸爸");
OneFamilyThread o4 = new OneFamilyThread("妈妈");
OneFamilyThread o5 = new OneFamilyThread("我");
o1.thread.setPriority(Thread.MAX_PRIORITY); // MAX_PRIORITY优先级最大
o2.thread.setPriority(Thread.MAX_PRIORITY - 1); // 较次之
o3.thread.setPriority(Thread.NORM_PRIORITY); // NORM_PRIORITY处于中间位置
o4.thread.setPriority(Thread.NORM_PRIORITY - 1);
o5.thread.setPriority(Thread.MIN_PRIORITY); // MIN_PRIORITY优先级最小
o1.thread.start(); // 启动线程
o2.thread.start();
o3.thread.start();
o4.thread.start();
o5.thread.start();
o5.thread.join(); // 等待线程运行结束
} catch (InterruptedException e) { // 捕获拦截异常
System.out.println("等待线程结束出错:" + e.getMessage());
class TwoFamilyThread implements Runnable {
public TwoFamilyThread() {
} // 默认构造方法
public void run() {
System.out.println("家族人员:" + thread.getName()); // 获得线程的名称
public void startThreadByLevel() { // 按优先级执行线程
TwoFamilyThread t1 = new TwoFamilyThread(); // 创建线程类
TwoFamilyThread t2 = new TwoFamilyThread();
TwoFamilyThread t3 = new TwoFamilyThread();
TwoFamilyThread t4 = new TwoFamilyThread();
TwoFamilyThread t5 = new TwoFamilyThread();
t1.thread = new Thread(t1, "爷爷"); // 线程类赋名称
t2.thread = new Thread(t2, "奶奶");
t3.thread = new Thread(t3, "爸爸");
t4.thread = new Thread(t4, "妈妈");
t5.thread = new Thread(t5, "我");
t1.thread.setPriority(10); // 线程优先级10为优先级最高 t2.thread.setPriority(9);
t3.thread.setPriority(8);
t4.thread.setPriority(7);
t5.thread.setPriority(6);
t1.thread.start(); // 启动线程
t2.thread.start();
t3.thread.start();
t4.thread.start();
t5.thread.start();
t5.thread.join(); // 等待线程运行结束
} catch (InterruptedException e) { // 捕获拦截异常
System.out.println("等待线程结束出错:" + e.getMessage());
class ThreeFamilyThread extends Thread {
public ThreeFamilyThread() {
} // 默认构造方法
public ThreeFamilyThread(String name) { // 带参数构造方法初始一个线程
thread = new Thread(this, name);
public void run() {
System.out.println("家族人员:" + thread.getName()); // 获得线程的名称
public void startThreadByLevel() { // 按优先级执行线程
ThreeFamilyThread e1 = new ThreeFamilyThread("爷爷");// 创建线程对象并命名
ThreeFamilyThread e2 = new ThreeFamilyThread("奶奶");
ThreeFamilyThread e3 = new ThreeFamilyThread("爸爸");
ThreeFamilyThread e4 = new ThreeFamilyThread("妈妈");
ThreeFamilyThread e5 = new ThreeFamilyThread("我");
e1.thread.setPriority(Thread.MAX_PRIORITY); // MAX_PRIORITY优先级最大
e2.thread.setPriority(Thread.MAX_PRIORITY - 1); // 较次之
e3.thread.setPriority(Thread.NORM_PRIORITY); // NORM_PRIORITY处于中间位置
e4.thread.setPriority(Thread.NORM_PRIORITY - 1);
e5.thread.setPriority(Thread.MIN_PRIORITY); // MIN_PRIORITY优先级最小
e1.thread.start(); // 启动线程
e2.thread.start();
e3.thread.start();
e4.thread.start();
e5.thread.start();
e5.thread.join(); // 等待线程运行结束
} catch (InterruptedException e) { // 捕获拦截异常
System.out.println("等待线程结束出错:" + e.getMessage());
public class TextPriorityLevel extends Thread { // 操作运用优先级实现家庭等的类
public static void main(String[] args) { // java程序主入口处
System.out.println("继承Thread类,根据数字从高到低实现线程优先级");
new TwoFamilyThread().startThreadByLevel();
System.out.println("继承Thread类,根据静态等级常量实现线程优先级");
new ThreeFamilyThread().startThreadByLevel();
System.out.println("实现Runnable接口,根据静态等级常量实现线程优先级");
new OneFamilyThread().startThreadByLevel();
}程序解读OneFamilyThread类实现Runnable接口可看作是一线程类,实现该接口必须实现run()方法,该类的startThreadByLevel()方法创建5个线程,并对每个线程设置优先级。其中Thread类的MAX_PRIORITY表示优先级最高,NORM_PRIORITY表示优先级居中,MIN_PRIORITY表示优先级最小。启动线程,线程是按照优先级的不同依次启动运行。TwoFamilyThread类实现Runnable接口可看作是一线程类,实现该接口必须实现run()方法,类中的startThreadByLevel()方法创建5个线程,每个线程设置优先级。其中setPriority(整数)方法是以数字设置优先级,10表示优先级最高,优先级依次类推,1表示优先级最低。启动线程,线程是按照优先级的不同依次启动运行。ThreeFamilyThread类继承Thread线程类,扩展run()方法。startThreadByLevel()方法创建5个线程类,并设置5个线程的优先级,方式与OneFamilyThread类的该方法相同。启动线程,线程是按照优先级的不同依次启动运行。每个类中都含有join()方法,该方法是等待前面的线程运行结束才运行该方法后的线程。
全部评论()
资料加载中...
已关注 , 取消本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 java线程的优先级 的文章

 

随机推荐