【第69题】JAVA高级技术-多线程3(查看和修改线程优先级)
回城传送–》《JAVA筑基100例》
零、前言
今天是学习 JAVA语言 打卡的第69天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。
因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。
学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。
我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 JAVA语言 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
一、题目描述
题目:JAVA中每个线程都有优化级属性,默认情况下,新建的线程和创建该线程的线程优先级是一样的。当线程调度器选择要运行的线程时,会选择优先级高的线程。
实现:查看和修改线程的优先级
二、解题思路
创建一个类:ThreadPriorityTest,继承了JFrame。用来界面显示当前线程组中运行的线程。
定义2个方法:
- do_this_windowActivated():用来监听窗体激活事件
- do_button_actionPerformed() :用来单击修改按钮事件,获取用户输入的优先级和选择的行,修改线程优先级。
Thread是程序中的执行线程。JAVA虚拟机允许应用程序并发地运行多个执行线程。
三、代码详解
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();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
线程列表和对应优先级:
修改线程优先级:
修改结果:
四、推荐专栏
五、示例源码下载
关注下面的公众号,回复筑基+题目号
筑基69
文章来源: xiaoxuzhu.blog.csdn.net,作者:小虚竹,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoxuzhu.blog.csdn.net/article/details/125027093
- 点赞
- 收藏
- 关注作者
评论(0)