多线程原理:同一时间内,CPU只能处理1条线程,只有1条线程在工作(执行);多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。当然若是多个CPU的话就可以同时执行多个线程了。
如下图,在main方法(主线程)中创建一个子线程,然后调用start方法JVM虚拟机会执行子线程中的run方法,而主线程继续执行下面的循环方法,即主线程和子线程相当于同时在并行。一个CPU每次只运行一个线程,所以这两个线程其实是每次随机被调用执行。
下图是从内存角度解释多线程的运行方式。
常用方法:
获取线程名称:
设置线程名称:
多线程的使用:两种方式
方式1:
1、创建一个子类继承多线程类Thread,然后在该子类中重写run方法实现我们想要的操作;
2、在调用类中创建1中的子类对象,然后调用子类对象的start方法,JVM虚拟机会调用被重写的run方法实现多线程效果。
方式2:推荐使用第二种方式
1、创建一个Runnable接口的实现类;
2、在实现类中重写Runnable接口的run方法,设置线程任务;
3、创建一个Runnable接口的实现类对象;
4、创建一个Thread类对象,其构造方法中传入Runnable接口的实现类对象;
5、调用Thread类对象的start方法,开启新线程执行run方法
匿名内部类:没有名字的,写在其他类内部的类。其作用就是简化代码。
格式:new 父类/接口() { 重写父类/接口中的方法 }
1.把子类继承父类,重写父类的方法、创建子类对象合成一步完成。
2.把实现类实现接口,重写实现类的方法、创建实现类对象合成一步完成。