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

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

相关文章

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之

java线程深度解析(四)——并发模型(Master-Worker)

http://blog.csdn.net/daybreak1209/article/details/51372929 二、Master-worker ——分而治之      Master-worker常用的并行模式之一,核心思想是由两个进程协作工作,master负责接收和分配任务,worker负责处理任务,并把处理结果返回给Master进程,由Master进行汇总,返回给客

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

使用协程实现高并发的I/O处理

文章目录 1. 协程简介1.1 什么是协程?1.2 协程的特点1.3 Python 中的协程 2. 协程的基本概念2.1 事件循环2.2 协程函数2.3 Future 对象 3. 使用协程实现高并发的 I/O 处理3.1 网络请求3.2 文件读写 4. 实际应用场景4.1 网络爬虫4.2 文件处理 5. 性能分析5.1 上下文切换开销5.2 I/O 等待时间 6. 最佳实践6.1 使用 as

Go并发模型:流水线模型

Go作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,Go并发模型有多种模式,通过流水线模型系列文章,你会更好的使用Go的并发特性,提高的程序性能。 这篇文章主要介绍流水线模型的流水线概念,后面文章介绍流水线模型的FAN-IN和FAN-OUT,最后介绍下如何合理的关闭流水线的协程。 Golang的并发核心思路 Golang并发核心思路是关注数据流动。数据流动的过程交给cha

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedDeque

文章目录 ConcurrentLinkedDeque特点构造方法常用方法使用示例注意事项 ConcurrentLinkedDeque ConcurrentLinkedDeque 是 Java 并发工具包(java.util.concurrent 包)中的一个线程安全的双端队列(Deque)实现,实现了 Deque 接口。它使用了链表结构,并且针对高并发环境进行了优化,非常适合

并发线程基础(一)

一、多个线程多个锁(lock) 概念:每个线程拿到自己的锁之后,获取线程锁之后,执行synchronized方法内的内容。      (一)synchronized 重入          概念:我比较喜欢通过自己的语言去记住和简化概念,重入:也叫“递归锁”,指同一个线程的外层方法获得锁之后,该方法里面调用修饰锁的方法,仍然可以获取锁,相互不受影响的。           语言话:同个类中