返回顶部
首页 > 资讯 > 精选 >基于线程、并发的基本概念(详解)
  • 608
分享到

基于线程、并发的基本概念(详解)

线程基本概念并发 2023-05-31 13:05:23 608人浏览 独家记忆
摘要

什么是线程?提到“线程”总免不了要和“进程”做比较,而我认为在Java并发编程中混淆的不是“线程”和“进程”的区别,而是“任务(Task)”。进程是表示资源分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位。关于

什么是线程?

提到“线程”总免不了要和“进程”做比较,而我认为在Java并发编程中混淆的不是“线程”和“进程”的区别,而是“任务(Task)”。进程是表示资源分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位。关于“线程”和“进程”的区别耳熟能详,说来说去就一句话:通常来讲一个程序有一个进程,而一个进程可以有多个线程。

但是“任务”是很容易忽略的一个概念。我们在实际编码中通常会看到这么一个包叫做xxx.xxx.task,包下是XxxTask等等以Task后缀名结尾的类。而XxxTask类通常都是实现Runnable接口或者Thread类。严格来说,“任务”和并发编程没多大关系,就算是单线程结构化顺序编程中,我们也可以定义一个Task类,在类中执行我们想要完成的一系列操作。“任务”我认为是我们人为定义的一个概念,既抽象又具体,抽象在它指由软件完成的一个活动,它可以是一个线程,也可以是多个线程共同达到某一目的的操作,具体在于它是我们认为指定实实在在的操作,例如:定时获取天气任务(定时任务),下线任务……关键就在于不要认为一个任务对应的就是一个线程,也许它是多个线程,甚至在这个任务中是一个线程池,这个线程池处理这个我们定义的操作。

我产生“线程”和“任务”的疑惑就是在《Thinking in Java》这本书的“并发”章节中它将线程直接定义为一个任务,在开篇标题就取名为“定义任务”,并且提到定义任务只需实现Runnable接口.而这个任务则是通过调用start来创建一改新的线程来执行.说来说去有点绕,其实也不必纠结于在书中时而提到线程,时而提到人任务.我认为就记住:任务是我们在编程时所赋这段代码的实际意义,而线程就关注它是否安全,是否需要安全,这就是后面要提到的线程安全问题.在像我一样产生疑惑时,不用在意它两者间的关系和提法。

什么是并发?

提到了并发,那又不得不和并行作比较。并发是指在一段时间内同时做多个事情,比如在1点-2点洗碗、洗衣服等。而并行是指在同一时刻做多个事情,比如1点我左手画圆右手画方。两个很重要的区别就是“一段时间”和“同一时刻”.在操作系统中就是:

1) 并发就是在单核处理中同时处理多个任务。(这里的同时指的是逻辑上的同时)

2) 并行就是在多核处理器中同时处理多个任务。(这里的同时指的就是物理上的同时)

初学编程基本上都是单线程结构化编程,或者说是根本就接触不到线程这个概念,反正程序照着自己实现的逻辑,程序一步一步按照我们的逻辑去实现并且得到希望输出的结果。但随着编程能力的提高,以及应用场景的复杂多变,我们不得不要面临多线程并发编程。而初学多线程并发编程时,常常出现一些预料之外的结果,这就是涉及到“线程安全”问题。

什么线程安全?

这是在多线程并发编程中需要引起足够重视的问题,如果你的线程不足够“安全”,程序就可能出现难以预料,以及难以复现的结果。《java并发编程实战》提到对线程安全不好做一个定义,我的简单理解就是:线程安全就是指程序按照你的代码逻辑执行,并始终输出预定的结果。书中的给的定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。具体有关线程安全的问题,例如原子性、可见性等等不在这里做详细阐述,适当的时候会进行详细介绍,简单说一点,想要这个线程安全,得在访问的时候给它上个,不让其他线程访问,当然这种说法不严谨,不过可以暂时这么理解。

以上是从基本概念理论出发来大致了解需要知道的一些概念,下面就针对jdk中有关线程的api来对多线程并发编程做一个了解。

java.lang.Object  -public void notify()//唤醒这个对象监视器正在等待获取锁的一个线程  -public void notifyAll()//唤醒这个对象监视器上正在等待获取锁的所有线程  -public void wait()//导致当前线程等待另一个线程调用notify()或notifyAll()  -public void wait(long timeout)// 导致当前线程等待另一个线程调用notify()或notifyAll(),或者达到timeout时间  -public void wait(long timeout, int nanos)//与上个方法相同,只是将时间控制到了纳秒nanos

--结束END--

本文标题: 基于线程、并发的基本概念(详解)

本文链接: https://lsjlt.com/news/225896.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于线程、并发的基本概念(详解)
    什么是线程?提到“线程”总免不了要和“进程”做比较,而我认为在Java并发编程中混淆的不是“线程”和“进程”的区别,而是“任务(Task)”。进程是表示资源分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位。关于...
    99+
    2023-05-31
    线程 基本概念 并发
  • JAVA基本概念详解
    目录一、java发展史二、Java跨平台二、JRE和JDK三、下载JDK四、常用的DOS命令五、配置Path环境变量六、第一个程序六、bug(甲壳虫)七、Notepad八、注释九、关...
    99+
    2024-04-02
  • C/C++中线程基本概念与创建详解
    目录一、线程基本概念二、为什么使用多线程1.避免阻塞2.避免CPU空转3.提升效率三、创建线程函数1.CreateThread2._beginthreadex四、简单多线程示例使用C...
    99+
    2024-04-02
  • C++泛型编程基本概念详解
    目录1.什么是泛型编程?2.函数模板(1)函数模板概念(2)函数模板格式(3)函数模板的原理(4)函数模板的实例化(5)模板参数的匹配原则3.类模板(1)类模板的定义格式(2)类模板...
    99+
    2024-04-02
  • Node.js的4个基本概念详解
    本篇内容主要讲解“Node.js的4个基本概念详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的4个基本概念详解”吧!1.非阻塞或异步I/O由于...
    99+
    2024-04-02
  • 基于java中集合的概念(详解)
    集合是储存对象的,长度可变,可以封装不同的对象迭代器: 其实就是取出元素的方式(只能判断,取出,移除,无法增加)就是把取出方式定义在集合内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类.二每一个容器的数据结构不...
    99+
    2023-05-31
    java 集合 概念
  • C/C++程序设计的基本概念详解
    目录概述main()函数内部名称变量和它的初始化编译时和运行时总结概述 学C语言有很长一段时间了,想做做笔记,把C和C++相关的比较容易忽视的地方记下来,也希望可以给需要的同学一些帮...
    99+
    2024-04-02
  • Go语言并发编程基础上下文概念详解
    目录前言1 Go 中的 Context2 Context 接口3 Context Tree4 创建上下文4.1 上下文创建函数4.2 Context 使用规范4.3 Context ...
    99+
    2024-04-02
  • C++string容器基本概念详解
    string基本概念 本质: string是C++风格的字符串,而string本质上是一个类 string和char*区别: char*是一个指针 string是一...
    99+
    2024-04-02
  • 基于多线程并发的常见问题(详解)
    一 概述1.volatile保证共享数据一旦被修改就会立即同步到共享内存(堆或者方法区)中。2.线程访问堆中数据的过程线程在栈中建立一个数据的副本,修改完毕后将数据同步到堆中。3.指令重排为了提高执行效率,CPU会将没有依赖关系的指令重新排...
    99+
    2023-05-31
    多线程 并发 线程并发
  • Java多线程——基础概念
    目录java多线程并发与并行:多线程使用场景:创建线程的方式:Thread类的有关方法:线程的同步:       ...
    99+
    2024-04-02
  • Hive的基本概念
    这篇文章主要介绍“Hive的基本概念”,在日常操作中,相信很多人在Hive的基本概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hive的基本概念”的疑惑有所帮助!接下来,...
    99+
    2024-04-02
  • Mysql的基本概念
    一 . Mysql 的基本概念 1、数据(data) 描述事物的符号记录包括数字文字图形图像声音档案记录等以记录形式按同意的格式进行存储 2、表 将不同的记录组织在一起用来存储具体数据 3、数据库 ...
    99+
    2023-09-20
    mysql 数据库
  • MQ的基本概念
    本篇内容介绍了“MQ的基本概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对象(objects)   &nb...
    99+
    2023-06-04
  • DOS的基本概念
    本篇内容介绍了“DOS的基本概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!    DOS是最基本的操作系统...
    99+
    2023-06-09
  • Java4Android开发教程(三)java基本概念
    什么是环境变量? 环境变量通常是指在操作系统当中,用来指定操作系统运行时需要的一些参数。通常为一系列的键值对。 path环境变量的作用 path环境变量是操作系统外部命令搜索路...
    99+
    2022-06-06
    JAVA android开发 教程 Android
  • java高并发之线程的基本操作详解
    目录新建线程终止线程线程中断等待(wait)和通知(notify)挂起(suspend)和继续执行(resume)线程等待线程结束(join)和谦让(yeild)总结新建线程 新建线...
    99+
    2024-04-02
  • VB.NET多维数组基本概念详解
    VB.NET中的多维数组是一种特殊的数据结构,它可以存储多个值,并且可以按照多个维度进行索引和访问。多维数组的基本概念包括以下几点:...
    99+
    2023-09-22
    VB.NET
  • K8s-helm简介及基本概念详解
    目录Helm简介一、什么是 Helm(官网:https://helm.sh/)二、Helm中的基本概念Chart三、从Helm2到Helm3的变化四、Helm版本支持策略Helm简介...
    99+
    2024-04-02
  • Python进程池基本概念
    目录一、python进程池二、进程池如何使用?申请()apply_async地图()map_async()close()终端()加入()三、代码实列四、进程池中的进程和一般的进程有什...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作