java并发机制的学习—线程优先级

2 篇文章 0 订阅

什么为线程的优先级

现代操作系统基本采用时分的形式调度运行线程,操作系统会分出一个个时间片,线程会分配到若干时间片,当线程的时间片用完了就会发生线程调度,并等待下次分配。线程分配的时间片多少也就决定了线程使用处理器资源的多少,而线程的优先级就是决定线程需要多或者少分配一些处理器资源的线程属性。

Java的优先级

存在优先级范围 :1 ~ 10,默认优先级为5,可以通过setPriority(int)方法来修改优先级。设置线程优先级时,针对频繁阻塞的线程(休眠或者I/O操作)需要设置较高的优先级,而偏重计算(或者较多CPU时间或者偏运算)的线程需要设置较低优先级,确保CPU处理器不会被独占。在不同的JVM以及操作系统上,线程规划会存在差异,有些操作系统甚至会忽略对线程优先级的设定。

代码示例:

package Thread;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 线程优先级
 * @author TofuCai
 *
 */
public class Priority {
	private static volatile boolean notStart = true;
	private static volatile boolean notEnd = true;
	
	public static void main(String[] args) throws InterruptedException {
		List<Job> jobs = new ArrayList<Job>();
		for(int i = 0; i < 10 ; i++){
			int priority = i < 5 ? Thread.MIN_PRIORITY : Thread.MAX_PRIORITY;
			Job job = new Job(priority);
			jobs.add(job);
			Thread thread = new Thread(job,"Thread:" + i);
			thread.setPriority(priority);
			thread.start();
		}
		
		notStart = false;
		TimeUnit.SECONDS.sleep(10);
		notEnd = false;
		for(Job job : jobs){
			System.out.println("Job Priority : " + job.priority + " ; " + "Count : " + job.jobCount);
		}
	}
	static class Job implements Runnable{
		private int priority;
		private long jobCount;
		public Job (int priority){
			this.priority = priority;
		}
		
		@Override
		public void run() {
			while(notStart){
				Thread.yield();
			}
			while(notEnd){
				Thread.yield();
				jobCount++;
			}
			
		}
		
	}
}

在windows 7环境下执行的结果:

在Mac OS X 10环境下执行的结果:

注意:java虽然可以设置线程的优先级,但是由于操作系统不同,线程的优先级设置可能会被忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值