这两个玩意比较玄,以理解为主。
线程的优先级
设置线程的优先级的参数越大,优先级越高。
我们应该知道,线程只有抢到CPU执行权,才会被执行。我们可以人为的提高某个线程的优先级,让他抢到CPU执行权的几率大一点。但是,抢到CPU的记录率大,但并不代表每次都能抢到CPU的执行权,这一点我们应该明确。比如,某个公司在举行年度聚会的抽奖环节,老板的小舅子也参与其中,于是抵不过老板娘的压力,偷偷给小舅子两张抽奖券,让小舅子的获奖记录大一点,但不代表小舅子能一定获奖。
回到代码层面
package cn.zl.ThreadTest;
public class ThreadDemo1 {
public static void main(String[] args) {
// 创建线程A
Thread threadA = new Thread(new ThreadA());
Thread threadB = new Thread(new ThreadB());
// 设置优先级
// Thread.MAX_PRIORITY 值为:10;
// Thread.MIN_PRIORITY 值为:1;
// Thread.NORM_PRIORITY 值为:5;
threadA.setPriority(Thread.MAX_PRIORITY);
threadA.setPriority(Thread.MIN_PRIORITY);
// 线程跑起来
threadA.start();
threadB.start();
}
}
// 搞两个线程
class ThreadA implements Runnable{
private int num = 1000;
public void run() {
while (num>0){
System.out.println("线程A"+" "+num);
num--;
}
}
}
class ThreadB implements Runnable{
private int num = 1000;
public void run() {
while (num>0){
System.out.println("线程B"+" "+num);
num--;
}
}
}
你可以测试100次,统计一下,线程A和线程B的先执行完的次数。
获取线程的优先级
// 获取线程的优先级
int priorityA = threadA.getPriority();
int priorityB = threadB.getPriority();
System.out.println(priorityA);
System.out.println(priorityB);
线程让步
线程让步就是调用线程的yield() 方法,它可以让当前的线程由"运行状态"进入"就绪状态",也就说让抢占到CPU执行权的线程,让出线程的执行权,大家再来抢。例如:还拿公司的年会抽奖,老板也获得一票,于是老板为了展现自己的大度,就放弃本地抽奖的机会。并不代表,明年的年会抽奖老板,不会获奖。大概就是这么个意思。
回到代码层面
package cn.zl.ThreadTest;
public class ThreadDemo1 {
public static void main(String[] args) {
// 创建线程A
Thread threadA = new Thread(new ThreadA());
Thread threadB = new Thread(new ThreadB());
// 线程跑起来
threadA.start();
threadB.start();
}
}
// 搞两个线程
class ThreadA implements Runnable{
private int num = 1000;
public void run() {
while (num>0){
// 当num值为100的时候,让出线程A的执行权。
if (num==100){
Thread.yield();
}
System.out.println("线程A"+" "+num);
num--;
}
}
}
class ThreadB implements Runnable{
private int num = 1000;
public void run() {
while (num>0){
System.out.println("线程B"+" "+num);
num--;
}
}
}
当前,肯定也存在线程A在num=100 的时候,让出了执行权,但是又抢到了。也可以多测试几次,现象可能会更加的明显。
网友评论