Java查看和修改線程優(yōu)先級操作詳解
查看和修改線程優(yōu)先級
1.題目
JAVA中每個線程都有優(yōu)化級屬性,默認情況下,新建的線程和創(chuàng)建該線程的線程優(yōu)先級是一樣的。當(dāng)線程調(diào)度器選擇要運行的線程時,會選擇優(yōu)先級高的線程。
實現(xiàn):查看和修改線程的優(yōu)先級
2.解題思路
創(chuàng)建一個類:ThreadPriorityTest,繼承了JFrame。用來界面顯示當(dāng)前線程組中運行的線程。
定義2個方法:
- do_this_windowActivated():用來監(jiān)聽窗體激活事件
- do_button_actionPerformed() :用來單擊修改按鈕事件,獲取用戶輸入的優(yōu)先級和選擇的行,修改線程優(yōu)先級。
Thread是程序中的執(zhí)行線程。JAVA虛擬機允許應(yīng)用程序并發(fā)地運行多個執(zhí)行線程。
3.代碼詳解
package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
* Description:
*
* @author xiaoxuzhu
* @version 1.0
*
* <pre>
* 修改記錄:
* 修改后版本 修改人 修改日期 修改內(nèi)容
* 2022/5/11.1 xiaoxuzhu 2022/5/11 Create
* </pre>
* @date 2022/5/11
*/
public class ThreadPriorityTest extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1127454227002083871L;
private JPanel contentPane;
private JTable table;
private JTextField textField;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ThreadPriorityTest frame = new ThreadPriorityTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ThreadPriorityTest() {
addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
do_this_windowActivated(e);
}
});
setTitle("查看和修改線程優(yōu)化級");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.SOUTH);
JLabel label = new JLabel("新優(yōu)先級(1~10)");
label.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
panel.add(label);
textField = new JTextField();
textField.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
panel.add(textField);
textField.setColumns(10);
JButton button = new JButton("修改");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
panel.add(button);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
table.setFont(new Font("微軟雅黑", Font.PLAIN, 14));
table.setRowHeight(30);
JTableHeader header = table.getTableHeader();
header.setFont(new Font("微軟雅黑", Font.PLAIN, 16));
header.setPreferredSize(new Dimension(header.getWidth(), 35));
scrollPane.setViewportView(table);
}
protected void do_this_windowActivated(WindowEvent e) {
ThreadGroup group = Thread.currentThread().getThreadGroup();// 獲得當(dāng)前線程所在線程組
Thread[] threads = new Thread[group.activeCount()];// 使用數(shù)組保存活動狀態(tài)的線程
group.enumerate(threads);// 獲得所有線程
DefaultTableModel model = (DefaultTableModel) table.getModel(); // 獲得表格模型
model.setRowCount(0); // 清空表格模型中的數(shù)據(jù)
model.setColumnIdentifiers(new Object[] { "線程ID", "線程名稱", "優(yōu)先級" }); // 定義表頭
for (Thread thread : threads) {// 增加行數(shù)據(jù)
model.addRow(new Object[] { thread.getId(), thread.getName(), thread.getPriority() });
}
table.setModel(model);// 更新表格模型
}
protected void do_button_actionPerformed(ActionEvent e) {
String text = textField.getText();
Integer priority = Integer.parseInt(text);
int selectedRow = table.getSelectedRow();
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setValueAt(priority, selectedRow, 2);
repaint();
}
}線程列表和對應(yīng)優(yōu)先級:

修改線程優(yōu)先級:

修改結(jié)果:

到此這篇關(guān)于Java查看和修改線程優(yōu)先級操作詳解的文章就介紹到這了,更多相關(guān)Java線程優(yōu)先級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring?retry實現(xiàn)方法請求重試的使用步驟
這篇文章主要介紹了spring?retry實現(xiàn)方法請求重試及使用步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Java學(xué)習(xí)之Lambda表達式的使用詳解
Lambda表達式是Java SE 8中一個重要的新特性,允許通過表達式來代替功能接口。本文將通過一些簡單的示例和大家講講Lamda表達式的使用,感興趣的可以了解一下2022-12-12
java面向?qū)ο笤O(shè)計原則之單一職責(zé)與依賴倒置原則詳解
這篇文章主要介紹了java面向?qū)ο笤O(shè)計原則之單一職責(zé)與依賴倒置原則的分析詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步早日升職加薪2021-10-10
Java設(shè)計模式之工廠模式實現(xiàn)方法詳解
這篇文章主要介紹了Java設(shè)計模式之工廠模式實現(xiàn)方法,結(jié)合實例形式較為詳細的分析了工廠模式的分類、原理、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下2017-12-12
Java獲取resources下文件路徑的幾種方法及遇到的問題
這篇文章主要給大家介紹了關(guān)于Java獲取resources下文件路徑的幾種方法及遇到的問題,在Java開發(fā)中經(jīng)常需要讀取項目中resources目錄下的文件或獲取資源路徑,需要的朋友可以參考下2023-12-12
Java 策略模式與模板方法模式相關(guān)總結(jié)
這篇文章主要介紹了Java 策略模式與模板方法模式相關(guān)總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01

