多线程

进程是一个应用程序(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();

posted @ 2021-03-02 14:02  幽香琳  阅读(55)  评论(0)    收藏  举报