1.两种线程调度模型
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片。
抢占调度模型(Java使用此模型):让优先级高的线程优先使用CPU。
2.线程优先级(表示线程获取CPU时间片的几率)
范围是1-10,默认优先级是5
设置优先级:my1.setPriority(10); my2.setPriority(1);
获取优先级:my1.getPriority();my2.getPriority();
3.线程控制
线程休眠:Thread.sleep(毫秒);//sleep()是静态方法,可以使用类名.方法名来调用
线程加入:my1.join();//等待该线程终止
线程礼让:Thread.yeild();//暂停当前正在执行的线程对象,将线程让出,大家一起抢线程使用权
守护线程:setDaemon(true);//将该线程标记为守护线程。当正在运行的线程都是守护线程时,Java虚拟机退出。该方法必须在启动线程前调用。
中断线程:my.interrupt();//中断线程
package com.baidu;
import java.util.*;
public class MyThread extends Thread {//MyThread继承Thread类
public void run() {//重写run方法
System.out.println("线程开始"+"---"+new Date());
try {
Thread.sleep(10000);//休眠10s
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("线程被中断");
}
System.out.println("线程结束"+"---"+new Date());
}
}
package com.baidu;
public class Thread_Demo{
public static void main(String[] args) {
MyThread my = new MyThread();//创建线程对象
my.start();
//当时间超过3s时结束线程
try {
Thread.sleep(3000);
my.interrupt();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--新建-创建线程对象
--就绪-有执行资格,没有执行权
--运行-有执行资格,有执行权
--阻塞-没有执行资格,没有执行权
--死亡-线程对象变成垃圾,等待回收