Java线程优先级示例代码
2023-06-13 09:15:05 时间
使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载。Java线程的优先级也差不多,优先级越高排程器就会给它越多的CPU执行时间,但请注意:如果有多个线程在等待一个机锁的时候,并不是优先级越高就可以越早执行。
importjava.awt.BorderLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
/**
*线程的优先级
*10个计数器线程分别被设置了不同的优先级,我们通过计数器的累加来观察优先级的作用
*@author五斗米
*@bloghttp://blog.csdn.net/mq612
*/
publicclassTestMainextendsJFrame{
privateMyThread[]thread=null;//要操作的线程
privateJPanelpane=null;
privateJButtonstartButton=null,stopButton=null;//启动、结束按钮
publicTestMain(){
super("线程的优先级");
pane=newJPanel();
thread=newMyThread[10];
for(inti=0;i<10;i++){//线程的优先级最小是1,最大是10
thread[i]=newMyThread(i+1);
}
startButton=newJButton("执行");
startButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
for(inti=0;i<10;i++){
thread[i].start();
}
}
});
stopButton=newJButton("结束");
stopButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
for(inti=0;i<10;i++){
thread[i].quit();
}
}
});
JPanelp=newJPanel();
p.add(startButton);
p.add(stopButton);
this.getContentPane().add(pane);
this.getContentPane().add(p,BorderLayout.NORTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
/**
*计数器线程
*/
classMyThreadextendsThread{
privateJTextFieldtext=null;//计数器
privateinti=0;//计数器
privateintpriority=0;//优先级
privateJLabellabel=null;//优先级显示标签
privatebooleanb=true;//控制线程结束的boolean变量
publicMyThread(intpriority){
this.priority=priority;
this.setPriority(priority);
JPanelp=newJPanel();
label=newJLabel("Priority="+priority);
text=newJTextField(12);
p.add(label);
p.add(text);
pane.add(p);//将自己的计数器加入主窗口面板中
}
/**
*结束线程
*/
publicvoidquit(){
b=false;
}
publicvoidrun(){
while(b){
this.text.setText(Integer.toString(i++));
try{
this.sleep(1);//减小这里的毫秒数,可以让我们更容易观察到结果
}catch(InterruptedExceptionex){
ex.printStackTrace();
}
}
}
}
publicstaticvoidmain(String[]args){
newTestMain();
}
}
相关文章
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- 【公基】口算提速,java 自动生成:加、减、乘、除、混合运算题目
- java运行环境配置(jdk配置)Java博客 2 年前 桃李Taoli
- 3. java缓存-线程内缓存guava cache
- java在线生成uuid_Java生成uuid
- java创建线程池的几种方式_Java中的线程池
- Java cloneable_java浅克隆和深克隆
- java创建线程池代码_java手写线程池
- JAVA代码审计之java反序列化
- java解释器虚拟机-Java代码如何运行在Java虚拟机中
- 【Java AWT 图形界面编程】LayoutManager 布局管理器 ③ ( BorderLayout 布局 )
- java线程的创建和管理(一)
- java 之容器详解编程语言
- Java动态代理详解编程语言
- 实现使用Java代码实现MySQL数据库连接(java连接mysql数据库代码)
- 在Linux中查看Java线程:一种方法(linux查看java线程)
- 利用Redis存储Java对象的方法(redis存储java对象)
- Java中的值传递和引用传递详解编程语言
- Java isEmpty()方法:判断字符串是否为空
- Linux下快速编写高效的Java代码(linux写java)
- Linux下运行Java:一步步踏上学习之路(linux下运行java)
- Novice:学习Java 7 在Linux上的简单入门(java 7 linux)
- java中通用的线程池实例代码
- java使用线程做的一个简单的ATM存取款实例代码
- Java并发编程示例(六):等待线程执行终止