服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - Java线程优先级示例代码

Java线程优先级示例代码

2019-10-13 14:47Java教程网 JAVA教程

使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载

使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载。Java线程的优先级也差不多,优先级越高排程器就会给它越多的CPU执行时间,但请注意:如果有多个线程在等待一个机锁的时候,并不是优先级越高就可以越早执行。

 

复制代码代码如下:

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** 
 * 线程的优先级 
 * 10个计数器线程分别被设置了不同的优先级,我们通过计数器的累加来观察优先级的作用 
 * @author 五斗米 
 * @blog http://blog.csdn.net/mq612 
 */
public class TestMain extends JFrame { 
    private MyThread [] thread = null; // 要操作的线程 
    private JPanel pane = null; 
    private JButton startButton = null, stopButton = null; // 启动、结束按钮 

    public TestMain(){ 
        super("线程的优先级"); 
        pane = new JPanel(); 
        thread = new MyThread[10]; 
        for(int i = 0; i < 10; i++){ // 线程的优先级最小是1,最大是10 
            thread[i] = new MyThread(i + 1); 
        } 
        startButton = new JButton("执行"); 
        startButton.addActionListener(new ActionListener(){ 
            public void actionPerformed(ActionEvent e) { 
                for(int i = 0; i < 10; i++){ 
                    thread[i].start(); 
                } 
            } 
        }); 
        stopButton = new JButton("结束"); 
        stopButton.addActionListener(new ActionListener(){ 
            public void actionPerformed(ActionEvent e) { 
                for(int i = 0; i < 10; i++){ 
                    thread[i].quit(); 
                } 
            } 
        }); 
        JPanel p = new JPanel(); 
        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); 
    } 
    /** 
     * 计数器线程 
     */
    class MyThread extends Thread{ 
        private JTextField text = null; // 计数器 
        private int i = 0; // 计数器 
        private int priority = 0; // 优先级 
        private JLabel label = null; // 优先级显示标签 
        private boolean b = true; // 控制线程结束的boolean变量 

        public MyThread(int priority){ 
            this.priority = priority; 
            this.setPriority(priority); 
            JPanel p = new JPanel(); 
            label = new JLabel("Priority=" + priority); 
            text = new JTextField(12); 
            p.add(label); 
            p.add(text); 
            pane.add(p); // 将自己的计数器加入主窗口面板中 
        } 
        /** 
         * 结束线程 
         */
        public void quit(){ 
            b = false; 
        } 
        public void run(){ 
            while(b){ 
                this.text.setText(Integer.toString(i++)); 
                try { 
                    this.sleep(1); // 减小这里的毫秒数,可以让我们更容易观察到结果 
                } catch (InterruptedException ex) { 
                    ex.printStackTrace(); 
                } 
            } 
        } 
    } 

    public static void main(String [] args){ 
        new TestMain(); 
    }   
}  

延伸 · 阅读

精彩推荐
  • JAVA教程轻量化 Java 开发框架Hasor 1.0.0 正式发布

    轻量化 Java 开发框架Hasor 1.0.0 正式发布

    今日Java轻量级的Hasor开发框架上市,这款软件能更好的让开发者完善应用程序,那么接下来随脚本之家一起去看看吧 ...

    互联网4832019-09-12
  • JAVA教程Java线程的相关方法详细解析

    Java线程的相关方法详细解析

    以下是对Java线程的相关方法进行了详细的介绍,需要的朋友可以过来参考下 ...

    java教程网4132019-10-12
  • JAVA教程详解Java设计模式——迭代器模式

    详解Java设计模式——迭代器模式

    这篇文章主要介绍了Java设计模式——迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    No_Game_No_Life_1472019-06-22
  • JAVA教程spring boot之SpringApplication 事件监听

    spring boot之SpringApplication 事件监听

    这篇文章主要介绍了spring boot之SpringApplication 事件监听,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    posuoren5092019-06-24
  • JAVA教程你真的了解java单例模式了吗?

    你真的了解java单例模式了吗?

    这篇文章主要介绍了你真的了解java单例模式了吗?实际上单例模式有着好几个变种,并且多线程中涉及到线程安全问题,,需要的朋友可以参考下...

    阿豪聊干货3732019-07-04
  • JAVA教程Java中的关键字volatile详解

    Java中的关键字volatile详解

    这篇文章主要介绍了Java中的关键字volatile,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    阳光、大地和诗歌4812019-06-19
  • JAVA教程通过反射注解批量插入数据到DB的实现方法

    通过反射注解批量插入数据到DB的实现方法

    今天小编就为大家分享一篇关于通过反射注解批量插入数据到DB的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友...

    Scub2172019-06-20
  • JAVA教程Java 继承原理与用法实例分析

    Java 继承原理与用法实例分析

    这篇文章主要介绍了Java 继承原理与用法,结合实例形式分析了java面向对象程序设计中继承的概念、原理、用法及操作注意事项,需要的朋友可以参考下...

    longzhoufeng3362019-06-26