多线程
进程是一个应用程序(1个进程是一个软件)
线程是一个进程中的执行场景/执行单元。
一个进程可以启动多个线程。
2.对于java程序来说,当在DOS命令窗口输入:
java HelloWorld 回车之后
会先启动JVM再启动一个垃圾回收线程负责看护,回收垃圾
最起码,现在的java程序中至少有两个线程并发,
一个是垃圾回收线程,一个是执行main方法的主线程
3.进程和线程是什么关系?
进程可以看做是现实生活当中的公司
线程可以看做是公司当中的某个员工(某个部门)
注意:进程A和进程B的内存独立不共享
在java语言中:线程A和线程B,堆内存和方法区内存共享。(一个进程只有一个堆和方法区)
但是栈内存独立,一个线程一个栈(栈主要存储变量)
假设启动10个线程,会有10个栈空间,每个栈和每个栈之间互不干扰,各自执行各自的,这就是多线程并发
使用多线程机制后,main方法结束,是不是程序有可能也不会结束。
main方法结束只是主线程结束了,主栈空了,其他的栈(线程)可能还在压栈弹栈。
5.单核cpu不可能做到真正的多线程并发,可以给人一种“多线程并发的感觉”(多个线程之间频繁切换执行)
6.java语言中,实现线程有两种方式
java支持多线程机制。并且java已经将多线程实现了,我们只需要继承就行了。
第一种方式:编写一个类,直接继承java.lang.Thread,重写run方法
怎么创建线程对象?new就行了
怎么启动线程呢?调用线程对象的start()方法就行了
只要新的栈空间开出来,start()方法就结束了。线程就启动成功了
启动成功的线程会自动调用run方法,并且run方法在分支栈的栈底部(压栈)
run方法在分支栈的栈底部,main方法在主栈的栈底部。run和main是平级的。
如果不调用start()方法,线程永远都不会启动,在主方法没有调用start()方法之前,
Thread对象只是一个实例,而不是一个真正的线程。调用start()方法之后,start()会自动调用run()方法
第二种方式:编写一个类,实现java.lang.runnable接口,实现run方法
定义一个可运行的类
public class MyRunnable implement Runnable{
public void run(){}
}
创建线程对象
Thread t = new Thread(new MyRunnable());
启动线程
t.start();

浙公网安备 33010602011771号