Java線程優(yōu)先級(jí)示例代碼
使用過(guò)Bit下載軟件的同學(xué)應(yīng)該很清楚,我們有多個(gè)下載任務(wù)同時(shí)執(zhí)行,而其中的某一個(gè)或多個(gè)是非常重要的,于是給這些任務(wù)設(shè)定一個(gè)高度優(yōu)先,以便任務(wù)可以獲取更多的帶寬盡早完成下載。Java線程的優(yōu)先級(jí)也差不多,優(yōu)先級(jí)越高排程器就會(huì)給它越多的CPU執(zhí)行時(shí)間,但請(qǐng)注意:如果有多個(gè)線程在等待一個(gè)機(jī)鎖的時(shí)候,并不是優(yōu)先級(jí)越高就可以越早執(zhí)行。
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;
/**
* 線程的優(yōu)先級(jí)
* 10個(gè)計(jì)數(shù)器線程分別被設(shè)置了不同的優(yōu)先級(jí),我們通過(guò)計(jì)數(shù)器的累加來(lái)觀察優(yōu)先級(jí)的作用
* @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; // 啟動(dòng)、結(jié)束按鈕
public TestMain(){
super("線程的優(yōu)先級(jí)");
pane = new JPanel();
thread = new MyThread[10];
for(int i = 0; i < 10; i++){ // 線程的優(yōu)先級(jí)最小是1,最大是10
thread[i] = new MyThread(i + 1);
}
startButton = new JButton("執(zhí)行");
startButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 10; i++){
thread[i].start();
}
}
});
stopButton = new JButton("結(jié)束");
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);
}
/**
* 計(jì)數(shù)器線程
*/
class MyThread extends Thread{
private JTextField text = null; // 計(jì)數(shù)器
private int i = 0; // 計(jì)數(shù)器
private int priority = 0; // 優(yōu)先級(jí)
private JLabel label = null; // 優(yōu)先級(jí)顯示標(biāo)簽
private boolean b = true; // 控制線程結(jié)束的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); // 將自己的計(jì)數(shù)器加入主窗口面板中
}
/**
* 結(jié)束線程
*/
public void quit(){
b = false;
}
public void run(){
while(b){
this.text.setText(Integer.toString(i++));
try {
this.sleep(1); // 減小這里的毫秒數(shù),可以讓我們更容易觀察到結(jié)果
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String [] args){
new TestMain();
}
}
相關(guān)文章
深入理解Java集合框架如何構(gòu)建高效、靈活的數(shù)據(jù)管理方案
Java集合框架是Java語(yǔ)言中一個(gè)非常重要且強(qiáng)大的部分,它提供了一套豐富、靈活且類(lèi)型安全的集合數(shù)據(jù)結(jié)構(gòu),幫助開(kāi)發(fā)者以統(tǒng)一和一致的方式處理數(shù)據(jù)集合,這篇文章主要介紹了深入理解Java集合框架:構(gòu)建高效、靈活的數(shù)據(jù)管理方案,需要的朋友可以參考下2025-03-03
java中分組統(tǒng)計(jì)的三種實(shí)現(xiàn)方式
這篇文章主要介紹了java中分組統(tǒng)計(jì)的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
如何在Java中使用標(biāo)準(zhǔn)庫(kù)創(chuàng)建臨時(shí)文件
有時(shí)候我們程序運(yùn)行時(shí)需要產(chǎn)生中間文件,但是這些文件只是臨時(shí)用途,并不做長(zhǎng)久保存,我們可以使用臨時(shí)文件,不需要長(zhǎng)久保存,這篇文章主要給大家介紹了關(guān)于如何在Java中使用標(biāo)準(zhǔn)庫(kù)創(chuàng)建臨時(shí)文件的相關(guān)資料,需要的朋友可以參考下2023-10-10
Java中import java.util.Scanner的用處詳解
文章主要介紹Java中的Scanner類(lèi)及其常用方法next()和nextLine()的區(qū)別,next()方法在遇到空格、Tab鍵、回車(chē)鍵等分隔符時(shí)結(jié)束輸入,而nextLine()方法則接收所有輸入,直到遇到回車(chē)鍵2024-11-11
Java單例模式下的MongoDB數(shù)據(jù)庫(kù)操作工具類(lèi)
這篇文章主要介紹了Java單例模式下的MongoDB數(shù)據(jù)庫(kù)操作工具類(lèi),結(jié)合實(shí)例形式分析了java基于單例模式下操作MongoDB數(shù)據(jù)庫(kù)相關(guān)連接、查詢(xún)、插入、刪除等操作封裝技巧,需要的朋友可以參考下2018-01-01
關(guān)于Jackson的JSON工具類(lèi)封裝 JsonUtils用法
這篇文章主要介紹了關(guān)于Jackson的JSON工具類(lèi)封裝 JsonUtils用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Java 時(shí)間日期詳細(xì)介紹及實(shí)例
這篇文章主要介紹了Java 時(shí)間日期詳細(xì)介紹及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
通過(guò)IDEA快速定位和排除依賴(lài)沖突問(wèn)題
這篇文章主要介紹了通過(guò)IDEA快速定位和排除依賴(lài)沖突問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
MyBatis中select語(yǔ)句中使用String[]數(shù)組作為參數(shù)的操作方法
在 MyBatis 中,如何在 mapper.xml 配置文件中 select 語(yǔ)句中使用 String[] 數(shù)組作為參數(shù)呢,并且使用IN關(guān)鍵字來(lái)匹配數(shù)據(jù)庫(kù)中的記錄,這篇文章主要介紹了MyBatis中select語(yǔ)句中使用String[]數(shù)組作為參數(shù),需要的朋友可以參考下2023-12-12

