笔记 34 | java线程之Thread线程优先
来源:互联网 发布:安倍为什么能连任 知乎 编辑:程序博客网 时间:2024/06/05 16:49
地址
线程优先
前言
当我们需要在几个线程中拍个优先执行的顺序时,我们就需要用到线程优先的相关方法,
Thread类有setPriority(int level)方法用来设置线程的优先级。
线程的有限级从1到10,1是最不重要的,10是最重要的。如果没有给线程设置优先级,那么线程的优先级将是默认值5.
目录
- 未设置线程优先
- 设置了线程优先
1.未设置线程优先
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Text1(); text2(); } private void Text1() { Thread thread1 = new Thread(new TestThead(1)); Thread thread2 = new Thread(new TestThead(2)); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (Exception e) { } } private void text2() { } class TestThead implements Runnable{ int id ; public TestThead(int id ){ this.id=id; } @Override public void run() { try { for (int i = 0; i < 10; i++) { Log.i("md", "Thread" + id + ": " + i); } } catch (Exception e) { e.printStackTrace(); } } }
打印结果为:
Thread2: 1Thread1: 1Thread2: 2Thread1: 2Thread2: 3Thread1: 3Thread2: 4Thread1: 4Thread2: 5Thread1: 5Thread2: 6Thread1: 6Thread2: 7Thread2: 8Thread2: 9Thread2: 10Thread1: 7Thread1: 8Thread1: 9Thread1: 10
从这个例子可以看出当线程未设置优先级时,是交叉运行的!
2.设置线程优先
当我们加了
thread2.setPriority(Thread.MAX_PRIORITY); thread1.setPriority(Thread.MIN_PRIORITY);
打印结果为:
Thread1: 1Thread1: 2Thread1: 3Thread1: 4Thread1: 5Thread1: 6Thread1: 7Thread1: 8Thread1: 9Thread1: 10Thread2: 1Thread2: 2Thread2: 3Thread2: 4Thread2: 5Thread2: 6Thread2: 7Thread2: 8Thread2: 9Thread2: 10
3.其他
- 不过也不一定,在不同的机器上有可能是不一样的,如果物理操作系统的优先级如果少于java的优先级的话,那么java中某两个优先级,在系统中应该对应的是相同的数值,也就是在操作系统中优先级是相同。
- 所以Thread.setPriority()可能根本不做任何事情,这跟你的操作系统和虚拟机版本有关
- 线程优先级对于不同的线程调度器可能有不同的含义,可能并不是你直观的推测。特别地,优先级并不一定是指CPU的分享。在UNIX系统,优先级或多或少可以认为是CPU的分配,但Windows不是这样
- 线程的优先级通常是全局的和局部的优先级设定的组合。Java的setPriority()方法只应用于局部的优先级。换句话说,你不能在整个可能的范围 内设定优先级。(这通常是一种保护的方式,你大概不希望鼠标指针的线程或者处理音频数据的线程被其它随机的用户线程所抢占)
- 不同的系统有不同的线程优先级的取值范围,但是Java定义了10个级别(1-10)。这样就有可能出现几个线程在一个操作系统里有不同的优先级,在另外一个操作系统里却有相同的优先级(并因此可能有意想不到的行为)
- 操作系统可能(并通常这么做)根据线程的优先级给线程添加一些专有的行为(例如”only give a quantum boost if the priority is below X“)。这里再重复一次,优先级的定义有部分在不同系统间有差别。
- 大多数操作系统的线程调度器实际上执行的是在战略的角度上对线程的优先级做临时操作(例如当一个线程接收到它所等待的一个事件或者I/O),通常操作系统知道最多,试图手工控制优先级可能只会干扰这个系统。
- 你的应用程序通常不知道有哪些其它进程运行的线程,所以对于整个系统来说,变更一个线程的优先级所带来的影响是难于预测的。例如你可能发现,你有一个预期 为偶尔在后台运行的低优先级的线程几乎没有运行,原因是一个病毒监控程序在一个稍微高一点的优先级(但仍然低于普通的优先级)上运行,并且无法预计你程序 的性能,它会根据你的客户使用的防病毒程序不同而不同。
阅读全文
0 0
- 笔记 34 | java线程之Thread线程优先
- Java之线程Thread
- Java 复习笔记 线程Thread
- JAVA 线程之守护线程Daemon Thread
- java之线程thread生命周期
- Java笔记(4)-线程、Thread、Runable、开子线程、线程运行状态、线程同步、线程死锁
- Java 学习笔记 (5) - 线程 Thread
- java笔记之线程
- Java Thread 线程 操作线程
- java Thread:线程同步之进程通信
- Java线程之Thread-Per-Message Pattern
- Java线程之Worker Thread Pattern
- Java中的线程Thread方法之---stop()
- Java中的线程Thread方法之---join()
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---join()
- Shiro整合SSO单点登录系统
- pid调试
- cin读取数字时遇到字符的情况
- 使用HD Tune扫描一块1TB的机械硬盘需要多长时间?
- phpexcel导出导入
- 笔记 34 | java线程之Thread线程优先
- SpringBoot 中文手册 --Part IV --37-40
- Android 使用Retrofit自定义Converter解析相同接口返回不同数据
- 3分钟完成React-Native热更新
- anaconda 安装opencv3
- Angular入门-语法支持
- arcgisAPI 4.5本地部署,图标样式访问不到解决办法!!
- 在安卓机上测试内联汇编和直接写成.s文件以及C语言的速率比较
- TCP保持在FIN-WAIT-2状态的请求断开