springboot中如何使用线程?

一、什么是线程?
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

二、线程的五种状态
咱们java中一共有五种状态,创建、就绪、运行、堵塞和死亡。
1)创建:当程序刚刚创建完毕,还没有运行的时候就是创建状态
2)就绪:当程序调用了start方法,进入start方法之后,该线程就进入了就绪状态。当等待或者睡眠状态回来之后,也会进入到就绪状态
3)运行:当程序调用了run方法时,就进入了运行状态,就会开始运行run方法里面的方法
4)堵塞:当程序调用了sleep,suspend,wait等方法都可以导致堵塞,比如咱们sleep(2000)就是进入了堵塞状态
5)死亡:当调用完了run或者stop就会进入到死亡状态(注意:stop除非紧急状态,尽量不要使用stop否则会有运行到一半的线程会被强制终止,造成资源浪费啥的)

三、线程与进程的区别?
最简单的一句话来说:“进程包含线程”
在这里插入图片描述
国庆假期张梅长胖,哈哈。反正小铁是涨了1斤。~~ 啊!我的肉啊

咱们直接来讲springboot中如何使用线程吧!!如果想更加了解的话。请耐心看完。
1)简单吧!! 这个是咱们最最简单的一个线程了。直接重写run方法就好了。
在这里插入图片描述

2)那里需要这块逻辑就放在那里直接开启就好了
在这里插入图片描述
好了,最简单的使用咱们已经讲完了。现在咱们再仔细的了解一下
三、线程讲解
1)一个进程再运行的时候,最少最少会有1个线程在运行。这种情况java中当然也是存在的。当运行一个java文件的时候public static void mian(String [] ages) 会开启一个线程。如:下图,最终会输出一个main(注意:输出的main与public static void mian的main没有关系)
在这里插入图片描述
2)线程使用有两种方法
方法一:继承Thread,就是我上面介绍的那种情况。
因为java是单继承,所以一般开发当中咱们还是用Runnable实现来解决多线程。Runnable和 Thread用法基本一样,把extends 换成implements

方法二:实现Runnable接口(其实点进去咱们就能看到,Thread也实现了Runnable。如下图)
在这里插入图片描述
2)下一步咱们就可以启动它嘞,加油老弟!!
在这里插入图片描述
咱们new这个类的对象,在点调用他就可以了
那有的童鞋就会问了,你的这个run和start 有啥区别么??
:废话,run和start肯定有区别,要不官方为啥弄两个嘞。
简单来说,run是作为普通方法调用,而start通过线程来调用
start() 他启动线程才是真正意义上的多线程启动,以后咱们调用尽量使用start来调用他(注意:不是强制性的使用)启动start的时候就无需等待run方法体执行完毕,可以继续执行下面的代码;通过start调用线程是处于一个就绪状态,并没有运行然后通过Thread来调用run来执行代码的

run() 方法调用,相当于普通方法调用。程序还是要顺序执行,要等待run方法体执行完毕之后,才可以继续执行下面代码

这一期,介绍的内容干货比较多,小白的话还需要多多理解!!
加油吧!! 老弟们,实践才是王道。

动脑时刻(下一期我会出答案)自觉不许百度,嘻嘻
十有八九堪白眼,
???
下一句是啥,我在下一期等你

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot使用线程可以使用Java多线程编程的相关类和接口,例如`Thread`、`Runnable`和`Executor`等,并且可以通过Spring的依赖注入特性来管理线程池。 下面是一个示例代码: ```java import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class MultiThreadService { @Async // 声明这个方法是一个异步方法,Spring会自动创建一个线程池来执行这个方法 public void doTask1() { // 具体操作 System.out.println("Task 1 is running on thread " + Thread.currentThread().getName()); } @Async public void doTask2() { // 具体操作 System.out.println("Task 2 is running on thread " + Thread.currentThread().getName()); } } ``` 在以上示例,我们在Spring Boot定义了一个`MultiThreadService`类,其定义了两个异步方法`doTask1`和`doTask2`。在这两个方法上添加了`@Async`注解,表示这两个方法是异步执行的。 接下来,在Spring Boot的配置类添加`@EnableAsync`注解,启用异步方法。示例代码如下: ```java import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; @Configuration @EnableAsync // 启用异步方法 public class AsyncConfig { } ``` 最后,在Spring Boot的控制器调用`MultiThreadService`的异步方法即可。示例代码如下: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MultiThreadController { @Autowired private MultiThreadService multiThreadService; @GetMapping("/test") public String test() { multiThreadService.doTask1(); multiThreadService.doTask2(); return "Success"; } } ``` 以上代码,我们在控制器调用了`MultiThreadService`的异步方法`doTask1`和`doTask2`,Spring会自动创建一个线程池来执行这两个方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值