1.线程

单线程程序

在单线程程序中,“在某一时间点执行的处理”只有一个。如果有人问起“程序的哪部分正在执行”,我们能够指着程序中的某- -处回答说“这里,就是这儿”。这是因为,在单线程程序中,“正在执行程序的主体”只有一个。

  1. public class Main {
  2. public static void main(String[] args) {
  3. for (int i = 0; i < 10000; i++) {
  4. System.out.println("Good!");
  5. }
  6. }
  7. }

image.png
注意:前面说的“只有一个线程在运行”。其实严格来讲,Java处理的后台也有线程在运行。例如垃圾回收线程、GUI相关线程等。


多线程程序

由多个线程组成的程序就称为多线程程序

  • GUI应用程序
  • 耗时的I/O处理
  • 多个客户端

Thread类中的run方法和start方法

启动线程时,要使用如下类(一般称为Thread类):java. lang . Thread
image.png
新启动的线程的操作都编写在**run**方法中,**新线程启动后,会调用`run`方法,随后,当run方法执行结束时,线程也会跟着终止,但如果仅是这样,程序什么操作也不会做,所以必须新启动一个线程,调用run方法才可以。
图片.png
图片.png
`
start()`方法主要执行以下操作**

  • 启动新线程
  • 调用run方法

顺序、并行、并发

  • 【顺序(sequential)】:多个操作“依次处理”,十个操作一个人处理,这个人一个个按顺序执行


  • 【并行(parallel)】:多个操作“同时处理”,十个操作分给两个人处理,两个人并行处理


  • 【并发(concurrent)】:将一个操作分割成多个部分,并且允许无序处理,比如将十个操作分成相对独立的两类,这样便能够开始并发处理,
    • 如果一个人来处理,就是顺序处理分开的并发操作
    • 如果是两个人,就是可以并行处理同一个操作
    • 同理推,如果CPU只有一个,那么并发处理就是顺序执行的,而如果有多个CPU,那么并发处理就可能会并行运行

图片.png


线程的启动

1.利用Thread类的子类

图片.png
图片.png直到所有的线程都终止后,程序才会终止

Java程序的终止是指除守护线程(Daemon Thread)以外的线程全部在终止,守护线程是执行后台作业的线程。可以通过setDaemon方法把线程设置为守护线程


利用Runnable接口