1.线程的理解
线程是程序执行的一条路径,一个进程可以包含多条线程
多线程并发执行可以提高效率
2.多线程原理
同一时间内,CPU只能处理1条线程,只有1条线程在工作(执行);多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。
思考:如果线程非常非常多,会发生什么情况?
CPU会在N多线程之间调度,CPU会类似,消耗大量的CPU资源;每条线程被调度执行的频次会较低(线程的执行效率减低)。
3.并行与并发
并行:两个任务同时进行,需要有多核CPU才能实现
并发:两个任务同时请求运行,但CPU只能运行其中的一个,则让两个任务轮流进行,但由于时间间隔很短,给人的感觉是都在运行。
4.Java程序的运行原理
Java命令启动Java虚拟机,启动JVM就像启动了一个应用程序,一个进程,该进程会自动启动一个主线程,然后主线程去调用某个类的main方法
JVM是多线程的
5.多线程程序的实现
方法1:继承Thread类
package javastudy01;
//1.通过继承thread类
class MyThread extends Thread {
//重写Run方法
public void run(){
System.out.println("我是一个线程.");
}
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.run();//仅相当于开启一个普通方法
mt.start();//开启线程,且JVM自动调用run方法,开启线程需要时间
}
}
运行结果
方法2:实现Runnable接口
package javastudy01;
class Myrunnable implements Runnable {
public static void main(String[] args) {
//由于接口中无start方法,所以需要创建线程对象t
Myrunnable mr = new Myrunnable();
//Punnable target = mr ;
//把上面的对象当做参数传递给Thread的构造函数
Thread t = new Thread(mr);
t.start();
}
@Override
public void run() {
System.out.println("我是接口实现的线程.");
}
}
运行结果
方法3:匿名内部类
package javastudy01;
public class Thread3 {
public static void main(String[] args) {
new Thread(){
public void run(){
System.out.println("匿名实现线程");
}
}.start();
//runnable接口
new Thread(new Runnable(){ //把runnable子类对象传递给thread的构造方法
public void run(){
System.out.println("接口匿名实现线程");
}
}).start();
}
}
运行结果