JAVA之多线程优先级问题

本文通过一个Java示例程序展示了线程优先级的实际效果。实验表明,线程优先级仅作为调度提示,不能确保高优先级线程一定先执行或获得更多CPU时间。文章中的程序创建了四个不同优先级的线程,并观察它们的执行顺序。

 线程优先级,并不能保证优先级高的先运行,也不保证优先级高的更多的分配CPU时间,只是对系统的建议而已,到底运行哪个,是操作系统决定的,都不是java说了算的。

优先级高就是说同等条件下我运行的概率会比优先级低的高,至于具体怎么分配,这样看虚拟机的策略。但是肯定不会是像你想的那样,优先级高的运行完才运行优先级低的


package Project;
import java.awt.*;
import javax.swing.*;

class CreateThread implements Runnable
{
	private int n = 0;
	private JProgressBar progressbar;
	private String str;
	public CreateThread(JProgressBar progressbar, String str)
	{
		this.progressbar = progressbar;
		this.str = str;
	}
	public void run()
	{
		n = 0;
		while(true)
		{
			try{
				Thread.sleep(5000);
			}catch(Exception e)
			{
				e.printStackTrace();
			}
			progressbar.setValue(n++);
			System.out.println(str);
			if(n == 101)
				break;
		}
	}
}

public class Project1 extends JFrame
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -8798841678332294307L;
	public void setProgressBar(JProgressBar progressbar, Container container)
	{
		progressbar.setStringPainted(true);
		container.add(progressbar);
	}
	public Project1()
	{
		super("进程");
		Container container = getContentPane();
		container.setBackground(Color.white);
		container.setLayout(new GridLayout(4, 1, 10, 10));
		
		final JProgressBar progressbar1 = new JProgressBar();
		setProgressBar(progressbar1, container);
		Thread thread1 = new Thread(new CreateThread(progressbar1, "progressbar1"));
		thread1.setPriority(1);
		thread1.start();
		
		final JProgressBar progressbar2 = new JProgressBar();
		setProgressBar(progressbar2, container);
		Thread thread2 = new Thread(new CreateThread(progressbar2, "progressbar2"));
		thread2.setPriority(7);
		thread2.start();
		
		final JProgressBar progressbar3 = new JProgressBar();
		setProgressBar(progressbar3, container);
		Thread thread3 = new Thread(new CreateThread(progressbar3, "progressbar3"));
		thread3.setPriority(4);
		thread3.start();
		
		final JProgressBar progressbar4 = new JProgressBar();
		setProgressBar(progressbar4, container);
		Thread thread4 = new Thread(new CreateThread(progressbar4, "progressbar4"));
		thread4.setPriority(10);
		thread4.start();
		
	}
	public static void draw(JFrame jframe, int width, int height)
	{
		jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		jframe.setVisible(true);
		jframe.setBounds(300, 300, width, height);
	}
	public static void main (String []args)
	{
		draw(new Project1(), 300, 300);
	}
}

运行结果:
progressbar2
progressbar4
progressbar1
progressbar3
progressbar2
progressbar4
progressbar3
progressbar1
progressbar2
progressbar4
progressbar3
progressbar1
progressbar2
progressbar4
progressbar3
progressbar1
progressbar2
progressbar4
progressbar3
progressbar1
。。。。。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值