首页 > 文章列表 > Java中线程优先级的查询和修改方法

Java中线程优先级的查询和修改方法

java
445 2023-05-06

Java怎么查看和修改线程优先级

查看和修改线程优先级

1.题目

JAVA中每个线程都有优化级属性,默认情况下,新建的线程和创建该线程的线程优先级是一样的。当线程调度器选择要运行的线程时,会选择优先级高的线程。

实现:查看和修改线程的优先级

2.解题思路

创建一个类:ThreadPriorityTest,继承了JFrame。用来界面显示当前线程组中运行的线程。

定义2个方法:

  • do_this_windowActivated():用来监听窗体激活事件

  • do_button_actionPerformed() :用来单击修改按钮事件,获取用户输入的优先级和选择的行,修改线程优先级。

Thread是程序中的执行线程。JAVA虚拟机允许应用程序并发地运行多个执行线程。

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>

 * 修改记录:

 * 修改后版本	        修改人		修改日期			修改内容

 * 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("查看和修改线程优化级");

        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("新优先级(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();// 获得当前线程所在线程组

        Thread[] threads = new Thread[group.activeCount()];// 使用数组保存活动状态的线程

        group.enumerate(threads);// 获得所有线程

        DefaultTableModel model = (DefaultTableModel) table.getModel(); // 获得表格模型

        model.setRowCount(0); // 清空表格模型中的数据

        model.setColumnIdentifiers(new Object[] { "线程ID", "线程名称", "优先级" }); // 定义表头

        for (Thread thread : threads) {// 增加行数据

            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();

    }

}

线程列表和对应优先级:

修改线程优先级:

修改结果: