一、线程优先级
通常我们的计算机只有个cpu,cpu在某一个时刻只能得到cup时间片,也就是使用权,才可以执行指令。在单cpu的机器上线程不是并行运行的,只有在多个cpu上线程才可以并行运行。java虚拟机要负责线程的调度,取得cpu的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型,java使用抢占式调度模型。
分时调度模型:所有线程轮流使用cpu的使用权,平均分配每个线程占用cpu的时间片。
抢占式调度模型:优先让优先级高的线程使用cpu,如果线程的优先级相同,那么会随机选择一个。(改为,优先级高的线程获取的cpu时间片相对多一些。)
1.线程三个基本方法
package ThreadTest;
/*
关于线程优先级
三个方法:
1.获取当前线程对象:Thread.currentThread()
2.给线程取名:t.getName()
3.获取线程名称:t2.setName("t2");
*/
public class ThreadTest4 {
public static void main(String[] args) {
//如何获取当前线程对象
Thread t=Thread.currentThread();//t保存的内存地址指向的线程是“主线程对象”。
//获取线程的名字
System.out.println(t.getName());//main
Thread t1=new Thread(new Proccess());
t1.start();
//可以给线程起名
Thread t2=new Thread(new Proccess());
t2.setName("t2");
t2.start();//t2
}
}
class Proccess implements Runnable{
public void run() {
Thread t=Thread.currentThread();//t保存的内存地址指向的线程是“t1线程对象”
System.out.println(t.getName());//Thread-0 Thread-1 Thread-2....
}
}
2.线程优先级
线程优先级主要分三种:MAX_PRIORITY(最高级);MIN_PRIORITY(最低级);
NORM_PRIORITY(标准默认)
package ThreadTest;
/*
线程优先级高的获取的cpu时间片相对多一些
优先级:1-10
最低:1
最高:10
默认:5
*/
public class ThreadTest5 {
public static void main(String[] args) {
System.out.println(Thread.MAX_PRIORITY);//10
System.out.println(Thread.MIN_PRIORITY);//1
System.out.println(Thread.NORM_PRIORITY);//5
Thread t1=new MyProccess();
t1.setName("t1");
Thread t2=new MyProccess();
t2.setName("t2");
System.out.println("t1优先级"+t1.getPriority());
System.out.println("t2优先级"+t2.getPriority());
//设置优先级
t1.setPriority(5);
t2.setPriority(6);
//启动
t1.start();
t2.start();
}
}
class MyProccess extends Thread{
public void run() {
for(int i=0;i<50;i++) {
System.out.println(Thread.currentThread().getName()+"---->"+i);
}
}
}