0%

Java基础--08多线程

概念

进程和线程

  • 程序:一段静态的代码
  • 进程:程序的一次执行过程,或内存中正在运行的应用程序。进程为操作系统调度和分配资源的最小单位。
  • 线程:进程细化为线程,一个进程同时执行多个线程即多线程。CPU调度和执行的最小单位

启动一个spring(java)程序,即JVM实例,即进程,进程中同时处理多个线程任务,即多线程(CPU核心数)。

运行时内存中

  • 方法区和堆是线程共享的
  • 虚拟机栈、本地方法栈、程序计数器是线程隔离的(每个线程有一份)

线程调度

  • 分时调度
  • 抢占式调度

串行、并行和并发

  • 串行:一个接一个
  • 并行:同时间多个,3个CPU做3件事(不涉及抢占CPU)
  • 并发:A、B、C线程,1CPU,轮换交替执行ABC(抢占CPU)

java线程

  • 继承Thread

  • @AllArgsConstructor
    class AThread extends Thread {
      @Override
      public void run() {
        try {
          sleep(1000);
        } catch (InterruptedException e) {
          throw new RuntimeException(e);
        }
        System.out.println("写自己的线程实现");
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      


    - 实现Runnable

    - ```java
    class BThread implements Runnable {
    @Override
    public void run() {
    System.out.println("写自己的线程实现");
    }
    }
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
Thread aThread = new AThread();
Thread bThread = new Thread(new BThread());
aThread.start();
bThread.start();
}
/**
* 写自己的线程实现B
* 写自己的线程实现A
*/

如果aThread直接调研run方法,只是main方法主线程调用了一个方法,并不是多线程。

一个线程不能在执行start多次

Thread类方法

  • 构造器
    1. public Thread(); 新线程
    2. public Thread(String name); 指定名字新线程
    3. public Thread(Runnable target); 指定目标对象的新线程
    4. public Thread(Runnable target, String name); 指定目标对象的新线程,并指定线程名

线程方法

  • start、stop
  • run
  • wait、sleep