Java 学习笔记之 线程Priority
线程Priority:
线程可以划分优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。
设置线程优先级有助于帮助“线程规划器”确定在下一次选择哪个线程来优先执行。
线程优先级分为10个等级,1-》10
三个常用等级:

线程优先级继承性:
A线程启动了B线程,则B线程的优先级与A线程是一样的。
public class PriorityInheritThread extends Thread {
@Override
public void run() {
System.out.println("1 Run priority = " + this.getPriority());
PriorityInheritThread2 thread2 = new PriorityInheritThread2();
thread2.start();
}
}
public class PriorityInheritThread2 extends Thread{
@Override
public void run() {
System.out.println("2 Run priority = " + this.getPriority());
}
}
public class ThreadRunMain {
public static void main(String[] args) {
testPriorityInheritThread();
}
public static void testPriorityInheritThread() {
System.out.println("Main thread begin priority = " + Thread.currentThread().getPriority());
Thread.currentThread().setPriority(6);
System.out.println("Main thread end priority = " + Thread.currentThread().getPriority());
PriorityInheritThread thread1 = new PriorityInheritThread();
thread1.start();
}
}
运行结果:

线程规则性:
优先级高的线程总是大部分先执行完。
线程随机性:
当线程优先等级差距很大,谁先执行完和Main线程代码的调用顺序无关。优先级高的线程也不一定每一次都先执行完。
public class RunFastThreadA extends Thread {
private int count = 0;
public int getCount() {
return count;
}
@Override
public void run() {
while(true){
count ++;
}
}
}
public class RunFastThreadB extends Thread {
private int count = 0;
public int getCount() {
return count;
}
@Override
public void run() {
while(true){
count ++;
}
}
}
public class ThreadRunMain {
public static void main(String[] args) {
testRunFastThread();
}
public static void testRunFastThread() {
try {
RunFastThreadA a = new RunFastThreadA();
a.setPriority(Thread.NORM_PRIORITY - 3);
a.start();
RunFastThreadB b = new RunFastThreadB();
b.setPriority(Thread.NORM_PRIORITY + 3);
b.start();
Thread.sleep(10000);
a.stop();
b.stop();
System.out.println("a = " + a.getCount());
System.out.println("b = " + b.getCount());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:

Java 学习笔记之 线程Priority的更多相关文章
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- 0040 Java学习笔记-多线程-线程run()方法中的异常
run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...
- 0039 Java学习笔记-多线程-线程控制、线程组
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...
- java学习笔记之线程(Thread)
刚开始接触java多线程的时候,我觉得,应该像其他章节的内容一样,了解了生命周期.构造方法.方法.属性.使用的条件,就可以结束了,然而随着我的深入学习了解,我发现java的多线程是java的一个特别重 ...
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
- 【java学习笔记】线程
1.线程的定义 ①继承Thread类,将执行的任务逻辑放到run方法中,调用start方法来开启线程 public class ThreadDemo { public static void main ...
- Java学习笔记之——线程的生命周期、线程同步
一. 线程的生命周期 新建(new Thrad):创建线程后,可以设置各个属性值,即启动前 设置 就绪(Runnable):已经启动,等待CPU调动 运行(Running):正在被CPU调度 阻塞(B ...
- JAVA学习笔记16——线程生命周期
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocking)和 ...
随机推荐
- LuoGu-P1239计数器-强大的贡献
P1239 计数器 题意:就是求从1到n间,1-9一共出现的次数 这道题直接暴力是不科学的,因为N有 1e9: 然后我就看到了一个很好的从贡献思考的方法: ——>转自洛谷学神的方法: 楼下dal ...
- STL 中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: nam ...
- 洛谷P1246编码问题-排列组合,分类讨论
编码问题 题意就是a,b,c.....ab.....编码,给你一个字符串,输出这是第几个: 这里可以用暴力枚举,但也可以用组合数学的高超知识: 既然这样我就说一下排列组合的方法,如果要弄一个 各位数字 ...
- cogs 1377. [NOI2011] NOI嘉年华 (dp
题意:给你n个活动的起止时间,要你从中选一些活动在2个会场安排(不能有两个活动在两个会场同时进行),使活动较少的会场活动数最大,以及在某个活动必须选择的前提下,求该答案. 思路:由于n很小,时间很大, ...
- codeforces 813 D. Two Melodies(dp)
题目链接:http://codeforces.com/contest/813/problem/D 题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么 ...
- 【Offer】[23] 【链表中环的入口结点】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 一个链表中包含环,如何找出环的入口结点?  思路分析 判断链表中是否有环:用快慢指针的方法,慢指针走一步,快指针走两步,如果快指针追上 ...
- hbase读取快照数据-lzo压缩遇到的问题
1.读取hbase快照数据时报UnsatisfiedLinkError: no gplcompression in java.library.path错: 2019-09-04 17:36:07,44 ...
- Vert.x Web之Router
Vert.x Web 是一系列用于基于 Vert.x 构建 Web 应用的构建模块. Vert.x Web 的大多数特性被实现为了处理器(Handler),因此您随时可以实现您自己的处理器.我们预计随 ...
- 可见性有序性,Happens-before来搞定
写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO 的 ...
- linux下tomcat无法远程访问(开放8080端口)
我们在linux下配置了tomcat后发现,无法访问除了linux(如果是虚拟机的话,宿主机子根本无法访问tomcat),解决下吧 原因是我们的tomcat访问需要8080端口,但是从外部访问,我们的 ...