一、实现多线程
1.进程:是正在运行的程序
是系统进行资源分配和调用的独立单位;每一个进程都有它自己的内存空间和资源分配
2.线程:是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序
多线程:一个进程如果有多条执行路径,则称为多线程程序
3.多线程的实现方式
方式一:继承Thread类
定义一个类MyThread继承Thread
在MyThread类中重写run()方法
创建MyThread类的对象
启动线程
//void start()导致此线程开始执行;JAVA虚拟机调用此线程的run()方法
run()是用来封装被线程执行的代码,直接调用
start()启动线程;然后由JVM调用此线程的run()方法
方式二:
public class HelloWorld {
public static void main(String[] args) throws InterruptedException {
//创建MyRunnable类的对象
MyRunnable my=new MyRunnable();
//创建Thread类的对象,把MyRunnable对象作为构造方法的参数
Thread t1=new Thread(my,"高铁");
Thread t2=new Thread(my,"飞机");
//启动线程
t1.start();
t2.start();
}
}
public class MyRunnable implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+ i);
}
}
}
4.设置和获取线程名称
void setName(String name):将此线程的名称更改为等于参数name
String getName():返回此线程名称
通过构造方法也可以设置线程名称
5.线程调度
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程
public final int getPriority():返回此线程的优先级
public final void setPriority(int newPriority):更改此线程的优先级
优先级高仅仅表示线程获取的CPU时间片的几率高,但是要在比较次数比较多,或者多次运行的时候才能看到你想要的结果
public class HelloWorld {
public static void main(String[] args) {
myThread my1 = new myThread();
myThread my2 = new myThread();
myThread my3 = new myThread();
my1.setName("高铁");
my2.setName("飞机");
my3.setName("汽车");
// System.out.println(my1.getPriority());//5
// System.out.println(my2.getPriority());//5
// System.out.println(my3.getPriority());//5
//
// System.out.println(Thread.MAX_PRIORITY);//10
// Syst