Java线程优先级示例代码
程序员文章站
2023-12-17 22:36:34
使用过bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载。...
使用过bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载。java线程的优先级也差不多,优先级越高排程器就会给它越多的cpu执行时间,但请注意:如果有多个线程在等待一个机锁的时候,并不是优先级越高就可以越早执行。
复制代码 代码如下:
import java.awt.borderlayout;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import javax.swing.jbutton;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jpanel;
import javax.swing.jtextfield;
/**
* 线程的优先级
* 10个计数器线程分别被设置了不同的优先级,我们通过计数器的累加来观察优先级的作用
* @author 五斗米
* @blog http://blog.csdn.net/mq612
*/
public class testmain extends jframe {
private mythread [] thread = null; // 要操作的线程
private jpanel pane = null;
private jbutton startbutton = null, stopbutton = null; // 启动、结束按钮
public testmain(){
super("线程的优先级");
pane = new jpanel();
thread = new mythread[10];
for(int i = 0; i < 10; i++){ // 线程的优先级最小是1,最大是10
thread[i] = new mythread(i + 1);
}
startbutton = new jbutton("执行");
startbutton.addactionlistener(new actionlistener(){
public void actionperformed(actionevent e) {
for(int i = 0; i < 10; i++){
thread[i].start();
}
}
});
stopbutton = new jbutton("结束");
stopbutton.addactionlistener(new actionlistener(){
public void actionperformed(actionevent e) {
for(int i = 0; i < 10; i++){
thread[i].quit();
}
}
});
jpanel p = new jpanel();
p.add(startbutton);
p.add(stopbutton);
this.getcontentpane().add(pane);
this.getcontentpane().add(p, borderlayout.north);
this.setdefaultcloseoperation(jframe.exit_on_close);
this.setsize(500, 300);
this.setlocationrelativeto(null);
this.setvisible(true);
}
/**
* 计数器线程
*/
class mythread extends thread{
private jtextfield text = null; // 计数器
private int i = 0; // 计数器
private int priority = 0; // 优先级
private jlabel label = null; // 优先级显示标签
private boolean b = true; // 控制线程结束的boolean变量
public mythread(int priority){
this.priority = priority;
this.setpriority(priority);
jpanel p = new jpanel();
label = new jlabel("priority=" + priority);
text = new jtextfield(12);
p.add(label);
p.add(text);
pane.add(p); // 将自己的计数器加入主窗口面板中
}
/**
* 结束线程
*/
public void quit(){
b = false;
}
public void run(){
while(b){
this.text.settext(integer.tostring(i++));
try {
this.sleep(1); // 减小这里的毫秒数,可以让我们更容易观察到结果
} catch (interruptedexception ex) {
ex.printstacktrace();
}
}
}
}
public static void main(string [] args){
new testmain();
}
}