并发、并行傻傻分不清楚?

2023-11-05 07:18

本文主要是介绍并发、并行傻傻分不清楚?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天,我们正在解决一个问题:

同时的,同时的愚蠢的困惑?线程在其生命周期中经历了什么?

知识给你解答生活中所有困难的问题。

=concurrent和parallel==

并发是指在一定时间内,多任务交替处理的能力。并行性是指同时处理多个任务的能力。

案例:当一个商场的销售员需要面对许多顾客时,有些顾客要求价格,有些顾客要求质量。这时,业务员需要不断地回答客户,不断地改变话题,记住前面的话题,以便他回答。这种方式可以理解为并发的。如果有许多销售人员对应多个客户,那么许多销售人员可以同时回答客户的问题。这条路是平行的。

=thread lifetime=

线程是CPU调度和分配的基本单元。线程可以有自己的操作堆栈、程序计数器、本地变量表和其他资源。它与同一进程中的其他线程共享进程的所有资源。

创建线程有三种方法。首先从线程类继承,如下所示:

第二种方式是实现Runnable接口,如下所示:

public class HandlerThread implements Runnable {@Overridepublic void run() {}}

 建议使用第二种方法,因为继承线程类不符合Richter的替换原则。实现可运行的接口可以使编程更加灵活,公开的细节更少。

public class Demo implements Callable<String> {public static void main(String[] args) throws ExecutionException, InterruptedException {Callable<String> callable=new Demo();FutureTask<String> futureTask=new FutureTask<>(callable);new Thread(futureTask).start();System.out.println(futureTask.get());}@Overridepublic String call() throws Exception {return "demo";}
}

第三种方法使用可调用接口,如下所示:

可调用接口和未来接口的区别在于:

  1. callable指定call(),runnable指定run()。
  2. 可调用任务可以在执行后返回值,而可运行任务不能返回值。
  3. 调用()方法可以引发异常,而run()方法不能引发异常。
  4. 运行可调用任务将生成一个未来对象,该对象表示异步计算的结果。它提供了一种检查计算是否已完成、等待计算完成以及检索计算结果的方法。通过未来的对象,我们可以了解任务的性能,取消任务的执行,并获得任务执行的结果。
  5. Callable是一个类似于runnable的接口。实现可调用接口的类和实现可运行的类是可以由其他线程执行的任务。

线程有五个生命周期,如下所示:

线程五种状态.jpg

线程的生命周期状态为:新状态、就绪状态、运行状态、阻塞状态和终止状态。

  • 新建,即新状态,是指创建线程而不启动线程的状态。
  • runnable,ready state,是在调用start()方法之后运行之前的状态。不能多次调用Start(),否则将引发IllegalStateException。
  • running,run state是执行run()时线程的状态。由于某些因素(如时间、异常、锁、调度等),线程可能会开始运行。
  • 阻塞、阻塞状态,进入此状态的情况包括:同步阻塞(其他线程占用的锁)、活动阻塞(调用线程的某些方法,主动授予CPU执行权限,如sleep()、join()等)和等待阻塞(执行wait()方法)。
  • Dead,终止状态,是运行()执行因异常而结束或退出后的状态。

我在这里说的是创建线程的形式。创建线程的本质是实际创建一个可运行的对象(您可以看到相关的源代码,线程实现可运行的接口,并且只有目标分配是在内部完成的)。在run方法中,仍然执行目标run方法)。线程的start方法是真正的线程创建方法(在内部调用native create square)。为什么不建议继承线程,因为它向外部世界公开了更多的细节?非常感谢你的想法。

这篇关于并发、并行傻傻分不清楚?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348283

相关文章

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、