溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java怎么查看和修改線程優(yōu)先級

發(fā)布時間:2022-08-23 14:56:39 來源:億速云 閱讀:162 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Java怎么查看和修改線程優(yōu)先級的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

查看和修改線程優(yōu)先級

1.題目

JAVA中每個線程都有優(yōu)化級屬性,默認(rèn)情況下,新建的線程和創(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)先級:

Java怎么查看和修改線程優(yōu)先級

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

Java怎么查看和修改線程優(yōu)先級

修改結(jié)果:

Java怎么查看和修改線程優(yōu)先級

以上就是“Java怎么查看和修改線程優(yōu)先級”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI