查看和修改线程优先级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(); }}
线程列表和对应优先级:
修改线程优先级:
修改结果:
以上就是如何在java中设置和获取线程优先级?的详细内容。