博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程的优先级
阅读量:7052 次
发布时间:2019-06-28

本文共 1863 字,大约阅读时间需要 6 分钟。

1、线程优先级简介

  Java中线程可以有优先级的设定,高优先级的线程比低优先级的线程将会获得更高的执行几率,线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。线程默认的优先级是5。

  获取线程优先级:public final int getPriority();

  更改线程优先级:public final void setPriority(int newPriority)。

  注意:优先级只是改变被执行的几率,优先级越大,会让线程获较多的执行机会。

2、优先级示例

  (1)待处理线程

public class PriorityDemo implements Runnable {	@Override	public void run() {		for (int x = 0; x < 100; x++) {			System.out.println(Thread.currentThread().getName() + "---" + x);		}	}}

 
 (2)测试类

public class PriorityDemoTest {	public static void main(String[] args) {		PriorityDemo pd = new PriorityDemo();		Thread t1 = new Thread(pd);		Thread t2 = new Thread(pd);		Thread t3 = new Thread(pd);		t1.setName("线程一");		t2.setName("线程二");		t3.setName("线程三");		// IllegalArgumentException		// 抛出此异常表明向方法传递了一个不合法或不正确的参数,即数值不在优先级范围内,如下		//t1.setPriority(10000);		// 通过下面方法可获取线程优先级//		System.out.println(t1.getPriority());//		System.out.println(t2.getPriority());//		System.out.println(t3.getPriority());				t3.setPriority(10); //所以t1会获得更多的执行机会		t1.setPriority(1);		t2.setPriority(1);		 t1.start();		 t2.start();		 t3.start();	}}

  
执行结果:线程一将会获得更多的执行机会,所以先期它的执行频率会大于线程t2和t3。

3、yield()方法

  方法:public static void yield(),暂停当前正在执行的线程对象,并执行其他线程。

  这个方法是为了让线程更和谐一些的运行,但是它只能暂停一下当前的进程,之后CPU的执行权被哪个线程抢到就不一定了,兴许暂停之后还是这个线程抢到执行权。所以如果要真正实现数据依次输出,不要依赖这个方法保证,需使用等待唤醒机制。

  实例:

    待处理线程类:

public class YieldDemo implements Runnable {	@Override	public void run() {		for (int x = 0; x < 100; x++) {			System.out.println(Thread.currentThread().getName() + "---" + x);			// public static void yield()			//线程内容执行完后就等(暂停)一下			Thread.yield();		}	}}
    测试类:

public class YieldDemoTest {	public static void main(String[] args) {		PriorityDemo pd = new PriorityDemo();		Thread t1 = new Thread(pd);		Thread t2 = new Thread(pd);		t1.setName("我是线程一");		t2.setName("我是线程二");		t1.start();		t2.start();	}}

你可能感兴趣的文章
排序算法之选择排序
查看>>
三门问题
查看>>
ES6之主要知识点(十)Proxy
查看>>
UITableView
查看>>
list详解
查看>>
oracle学习篇六:子查询
查看>>
北风网VIP6级学习视频地址
查看>>
团队小组开发nabc分析
查看>>
jQuery mobile
查看>>
CF893F:Subtree Minimum Query(线段树合并)
查看>>
1305. [CQOI2009]跳舞【最大流+二分】
查看>>
Windows Phone(二) WP7数据库连接(SQLite数据库)
查看>>
浮动与清除问题
查看>>
97. Interleaving String
查看>>
node.js 使用ejs模板引擎时后缀换成.html
查看>>
JAVA使用urlrewrite实现伪静态化
查看>>
python with ···as··· 用法
查看>>
C#.NET里面抽象类和接口有什么区别
查看>>
xampp下Apache服务的启动
查看>>
恐惧的缘由
查看>>