(十二)java并发编程--线程优先级
来源:互联网 发布:平面设计软件图标 编辑:程序博客网 时间:2024/05/16 01:43
线程的优先级并不能保证现成的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的也并不是没有机会执行。
优先级用1-10的整数表示,数值越大优先级越高,默认优先级为5。
在一个线程中开启另外一个线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。
如下代码中,
package thread_priority;/** * Created by fang on 2017/12/3. * 线程优先级. * MAX_PRIORITY 10 * NORM_PRIORITY 5 * MIN_PRIORITY 1 * setPriority()方法是设置优先级.getPriority()是获取优先级. * 不是绝对的优先级,是概率,优先级高概率高,但不代表绝对的先后顺序. */public class ThreadMain2 { public static void main(String[] args) throws InterruptedException { //两个线程没有任何的优先级. MyThread myThread = new MyThread(); Thread proxy = new Thread(myThread,"挨踢1"); MyThread myThread2 = new MyThread(); Thread proxy2 = new Thread(myThread2,"挨踢2"); //设置优先级 //会看到proxy2 执行的多,但是并不代表先后顺序,proxy也有执行在前面的. proxy.setPriority(Thread.MIN_PRIORITY); proxy2.setPriority(Thread.MAX_PRIORITY); proxy.start(); proxy2.start(); Thread.sleep(100); myThread.stop(); myThread2.stop(); }}package thread_priority;/** * Created by fang on 2017/12/3. * */public class MyThread implements Runnable { private boolean flag = true; private int num = 0; public void run(){ while (flag){ System.out.println(Thread.currentThread().getName() + "-->" + num++); } } public void stop(){ this.flag = !this.flag; }}
执行结果如下(一部分执行结果):并不是所有的第二个线程都在线程1的输出之前,但是明显线程2打印的较多,也就是线程2
执行的概率较多。
挨踢2-->0挨踢2-->1挨踢1-->0挨踢2-->2挨踢1-->1挨踢2-->3挨踢1-->2挨踢2-->4挨踢2-->5挨踢2-->6挨踢2-->7挨踢2-->8挨踢2-->9挨踢2-->10挨踢2-->11挨踢2-->12挨踢2-->13挨踢2-->14挨踢2-->15挨踢2-->16
我们也可以在编译器中断点调试,在调试过程中可以调试的当前线程和被挂起的线程。
总结:
优先级高的线程不一定执行在前面,只是概率高,优先级低的也不一定会在后面。感觉有些人生哲理了。
阅读全文
0 0
- (十二)java并发编程--线程优先级
- JAVA 并发编程-线程同步工具类(十二)
- JAVA 并发编程-线程同步工具类(十二)
- 【并发编程】线程优先级
- 《并发编程》--8.线程优先级
- Java并发编程的艺术(十二)——线程安全
- java并发编程(二)-休眠、优先级
- java并发编程第六章(4)使用基于优先级的阻塞式线程安全列表
- java并发编程-1.2线程信息获取和设置(ID,名称、优先级、状态)
- java并发(2)-优先级,让步,后台线程
- Java中的线程(十二)- 并发集合类
- Java并发库(十一、十二):线程锁、读写锁
- Java线程总结(十二):并发包------CountDownLatch
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)(r)
- scrapy 进阶使用
- Tensorflow框架基本使用方法
- python的数据类型(下)
- c#--c#6新特性
- intellij idea 破解 2017
- (十二)java并发编程--线程优先级
- js sort方法根据数组中对象的某一个属性值进行排序
- tensorflow指定gpu的使用
- HyperLPR车牌分割模型
- Maven Nexus 私有库搭建结合 idea开发配置
- Bailian3710 有多少位不同【位运算】
- Bailian2679 整数的立方和【入门】
- DTO的作用,以创建订单和订单列表分页为例
- 罗尔(Rolle)定理