线程优先级,并不能保证优先级高的先运行,也不保证优先级高的更多的分配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
。。。。。