带你了解多线程的真相(柯基版)

一、问题背景

最近有个已经工作了几年的小伙伴,发来私信说最近想换工作,可是自己对Java的基础内容忘得差不多了,尤其是多线程,于是就想让我给他梳理一下多线程相关的内容。所以,今天就给大家安排上。

什么是进程

在复习线程之前,先给大家说一下进程的概念。

所谓的进程,就是系统进行资源分配和调用的独立单元,每一个进程都有它独立的内存空间和系统资源。

目前的计算机系统,可以分为单进程和多进程系统,其区别如下:

  • 单进程操作系统:dos(一瞬间只能执行一个任务)
  • 多进程单用户操作系统:Windows(一瞬间只能执行多个任务)
  • 多进程多用户操作系统:Linux(一瞬间只能执行多个任务)

什么是线程

然后我们再来看看什么是线程。所谓的线程,就是进程里面的一条执行路径,多个线程可以共享进程里面的内存空间和系统资源。 一个进程中可以有多个线程,各个线程都有不同的分工。

那么进程和线程有什么关系呢?看下给大家的总结吧:

  • 进程与进程之间,其内存空间和系统资源是独立的;
  • 同一个进程里的多个线程之间,其内存空间和系统资源是共享的;
  • 一个进程里可以有一条或一条以上的线程;
  • 如果一个进程里只有一条线程,这条线程就叫做主线程;
  • 线程是在进程里的,他们是包含与被包含的关系。

创建线程的方式

那么我们该怎么创建出一个线程呢?一般情况下,我们可以采用以下方式。

1.继承线程类

在这种方式中,我们可以创建一个MyThread类继承Thread,并重写run方法,代码如下:

public class Test01 {
    
        
    public static void main(String[] args) {
    
      
        //创建线程的对象  
        MyThread t = new MyThread();  
        //启动线程  
        t.start();  
    }    
}  
//线程类  
class MyThread extends Thread{
    
       
    //当前线程抢到cpu资源后,就会执行run方法  
    @Override  
    public void run() {
    
      
        System.out.println("当前线程抢到资源了");  
    }  
}

2.实现Runnable接口

第二种方式就是实现Runnable接口。我们可以创建一个Task类,实现Runnable接口并重写run方法。
在这里插入图片描述

另外我们还可以通过实现Callable接口,或是利用Executors线程池创建线程,这两种方式就不演示实现代码了,感兴趣的同学可以私信获取教程哦。

总结

最后再给大家总结一下今天的重点:

  • 进程与进程的关系:进程独享内存空间和系统资源;
  • 线程与进程的关系:一个进程中至少包含一个线程;
  • 线程与线程的关系:在同一个进程里,多个线程共享内存空间和系统资源;
  • 一个进程中可以包含多个线程,但只有一个主线程。

如果你还有什么问题,可以留言,看到会第一时间帮你解决哦!

猜你喜欢

转载自blog.csdn.net/GUDUzhongliang/article/details/130485575