线程基本概念

JavaSE个人复习式整理知识点之异常、线程 异常、线程1 异常1.1 异常概念1.2 异常体系1.3 异常分类1.4 异常的产⽣过程解析2 异常的处理2.1 抛出异常throw2.2 Objects⾮空判断2.3 声明异常throws 1 异常 1.1 异常概念 异常,就是不正常的意思。在⽣活中:医⽣说,你的身体某个部位有异常,该部位和正常相⽐有点不同,该部位的功能将受影响。在程序中的意思就是: 异常 :指的是程序在执⾏过程中,出现的⾮正常的情况,最终会导致JVM的⾮正常停⽌。 在Java等⾯向对象的编程语⾔中,异常本身是⼀个类,产⽣异常就是创建 阅读详情
  线程 ( thread , 台湾称 执行绪)是"进程"中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。 计算机 科学术语,指运行中的 程序 的调度单位。

      线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

      在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度(affinity)。

      有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。

      进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但您必须小心,确保它们不会妨碍同一进程里的其它线程。

      Java 线程工具和 API 看似简单。但是,编写有效使用线程的复杂程序并不十分容易。因为有多个线程共存在相同的内存空间中并共享相同的变量,所以您必须小心,确保您的线程不会互相干扰。

一、线程的概念 

  一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。
 
新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。 

  甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法——init(),start(),stop()和destory()  ——是由执行该Applet的应用调用的。 

  单线程的概念没有什么新的地方,真正有趣的是在一个程序中同时使用多个线程来完成不同的任务。某些地方用轻量进程(Lightweig ht Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。 

  作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用"执行上下文"来代替"线程"。 

二、线程属性 

  为了正确有效地使用线程,必须理解线程的各个方面并了解Java 实时系统。必须知道如何提供线程体、线程的生命周期、实时系统如 何调度线程、线程组、什么是幽灵线程(Demo nThread)。 

  (1)线程体 
  所有的操作都发生在线程体中,在Java中线程体是从Thread类继承的run()方法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调用它的run()方法。run()方法内的代码实现所产生线程的行为,它是线程的主要部分。 

  (2)线程状态 
  附图表示了线程在它的生命周期内的任何时刻所能处的状态以及引起状态改变的方法。这图并不是完整的有限状态图,但基本概括了线程中比较感兴趣和普遍的方面。以下讨论有关线程生命周期以此为据。 


  ●新线程态(New Thread) 
  产生一个Thread对象就生成一个新线程。当线程处于"新线程"状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。
 
  ●可运行态(Runnable) 
  start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享。 

  ●非运行态(Not Runnable) 
  当以下事件发生时,线程进入非运行态。 
  ①suspend()方法被调用; 
  ②sleep()方法被调用; 
  ③线程使用wait()来等待条件变量; 
  ④线程处于I/O等待。 

  ●死亡态(Dead) 
  当run()方法返回,或别的线程调用stop()方法,线程进入死亡态 。通常Applet使用它的stop()方法来终止它产生的所有线程。 

  (3)线程优先级 
  虽然我们说线程是并发运行的。然而事实常常并非如此。正如前面谈到的,当系统中只有一个CPU时,以某种顺序在单CPU情况下执行多线程被称为调度(scheduling)。Java采用的是一种简单、固定的调度法,即固定优先级调度。这种算法是根据处于可运行态线程的相对优先级来实行调度。当线程产生时,它继承原线程的优先级。在需要时可对优先级进行修改。在任何时刻,如果有多条线程等待运行,系统选择优先级最高的可运行线程运行。只有当它停止、自动放弃、或由于某种原因成为非运行态低优先级的线程才能运行。如果两个线程具有相同的优先级,它们将被交替地运行。 

  Java实时系统的线程调度算法还是强制性的,在任何时刻,如果一个比其他线程优先级都高的线程的状态变为可运行态,实时系统将选择该线程来运行。 

  (4)幽灵线程 
  任何一个Java线程都能成为幽灵线程。它是作为运行于同一个进程内的对象和线程的服务提供者。例如,HotJava浏览器有一个称为" 后台图片阅读器"的幽灵线程,它为需要图片的对象和线程从文件系统或网络读入图片。 

  幽灵线程是应用中典型的独立线程。它为同一应用中的其他对象和线程提供服务。幽灵线程的run()方法一般都是无限循环,等待服务请求。 

  (5)线程组 
  每个Java线程都是某个线程组的成员。线程组提供一种机制,使得多个线程集于一个对象内,能对它们实行整体操作。譬如,你能用一个方法调用来启动或挂起组内的所有线程。Java线程组由ThreadGroup类实现。
 
  当线程产生时,可以指定线程组或由实时系统将其放入某个缺省的线程组内。线程只能属于一个线程组,并且当线程产生后不能改变它所属的线程组。 

三、多线程程序 

  对于多线程的好处这就不多说了。但是,它同样也带来了某些新的麻烦。只要在设计程序时特别小心留意,克服这些麻烦并不算太困难。 

  (1)同步线程 
  许多线程在执行中必须考虑与其他线程之间共享数据或协调执行状态。这就需要同步机制。在Java中每个对象都有一把锁与之对应。但Java不提供单独的lock和unlock操作。它由高层的结构隐式实现, 来保证操作的对应。(然而,我们注意到Java虚拟机提供单独的monito renter和monitorexit指令来实现lock和unlo 
ck操作。) 

      synchronized语句计算一个对象引用,试图对该对象完成锁操作, 并且在完成锁操作前停止处理。当锁操作完成synchronized语句体得到执行。当语句体执行完毕(无论正常或异常),解锁操作自动完成。作为面向对象的语言,synchronized经常与方法连用。一种比较好的办法是,如果某个变量由一个线程赋值并由别的线程引用或赋值,那么所有对该变量的访问都必须在某个synchromized语句或synchronized方法内。 

  现在假设一种情况:线程1与线程2都要访问某个数据区,并且要求线程1的访问先于线程2, 则这时仅用synchronized是不能解决问题的。这在Unix或Windows NT中可用Simaphore来实现。而Java并不提供。在Java中提供的是wait()和notify()机制。使用如下: 

  synchronized method-1(…){ call by thread 1. 
  ∥access data area; 
  available=true; 
  notify() 
  } 
  synchronized method-2(…){∥call by thread 2. 
  while(!available) 
  try{ 
  wait();∥wait for notify(). 
  }catch (Interrupted Exception e){ 
  } 
  ∥access data area 
  } 
  其中available是类成员变量,置初值为false。 

  如果在method-2中检查available为假,则调用wait()。wait()的作用是使线程2进入非运行态,并且解锁。在这种情况下,method-1可以被线程1调用。当执行notify()后。线程2由非运行态转变为可运行态。当method-1调用返回后。线程2可重新对该对象加锁,加锁成功后执行wait()返回后的指令。这种机制也能适用于其他更复杂的情况。 

  (2)死锁 
  如果程序中有几个竞争资源的并发线程,那么保证均衡是很重要的。系统均衡是指每个线程在执行过程中都能充分访问有限的资源。系统中没有饿死和死锁的线程。Java并不提供对死锁的检测机制。对大多数的Java程序员来说防止死锁是一种较好的选择。最简单的防止死锁的方法是对竞争的资源引入序号,如果一个线程需要几个资源,那么它必须先得到小序号的资源,再申请大序号的资源。 

四、线程和进程的比较


   进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。
    另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。

    与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
   当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。

   线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。

   发生进程切换与发生线程切换时相比较,进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;线程切换时,由于同不进程内的线程共享资源和地址 空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统的开销时间。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内 核完成,也可由用户程序进行。

      图1 多线程与进程之间的关系

五、线程的适用范围

    典型的应用

 1.服务器中的文件管理或通信控制

 2.前后台处理

 3.异步处理


六、线程的执行特性

      一个线程必须处于如下四种可能的状态之一:

      初始态:一个线程调用了new方法之后,并在调用start方法之前的所处状态。在初始态中,可以调用start和stop方法。

      Runnable:一旦线程调用了start 方法,线程就转到Runnable 状态,注意,如果线程处于Runnable状态,它也有可能不在运行,这是因为还有优先级和调度问题。

      阻塞/ NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。 退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。

      最后一个概念就是线程的优先级,线程可以设定优先级,高优先级的线程可以安排在低优先级线程之前完成。一个应用程序可以通过使用线程中的方法setPriority(int),来设置线程的优先级大小。

      线程有5种基本操作:

 派生:线程在进程内派生出来,它即可由进程派生,也可由线程派生。
 阻塞(Block):如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。
 激活(unblock):如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。
 调度(schedule):选择一个就绪线程进入执行状态。
 结束(Finish):如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。


      图2 线程的状态与操作
      线程的另一个执行特性是同步。线程中所使用的同步控制机制与进程中所使用的同步控制机制相同。

七、线程的分类

      线程有两个基本类型:

     用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。

     系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。

附:线程举例

      1. SUN Solaris 2.3

      Solaris支持内核线程、轻权进程和用户线程。一个进程可有大量用户线程;大量用户线程复用少量的轻权进程,轻权进程与内核线程一一对应。
      用户级线程在调用核心服务时(如文件读写),需要“捆绑(bound)”在一个LWP上。永久捆绑(一个LWP固定被一个用户级线程占用,该LWP移到LWP池之外)和临时捆绑(从LWP池中临时分配一个未被占用的LWP)。
      在调用系统服务时,如果所有LWP已被其他用户级线程所占用(捆绑),则该线程阻塞直到有可用的LWP。
      如果LWP执行系统线程时阻塞(如read()调用),则当前捆绑在LWP上的用户级线程也阻塞。
                                   

      图3  用户线程、轻权进程和核心线程的关系

 ¨        有关的C库函数
        /* 创建用户级线程             */
    int thr_create(void *stack_base, size_t stack_size,
    void *(*start_routine)(void *), void *arg, long flags,
    thread_t *new_thread_id); 
  其中flags包括:THR_BOUND(永久捆绑), THR_NEW_LWP(创建新LWP放入LWP池),若两者同时指定则创建两个新LWP,一个永久捆绑而另一个放入LWP池。
 ²        有关的系统调用
   /* 在当前进程中创建LWP     */
  int _lwp_create(ucontext_t *contextp, unsigned long flags,

  lwpid_t *new_lwp_id);
  /* 构造LWP上下文          */
  void _lwp_makecontext(ucontext_t *ucp,
   void (*start_routine)( void *), void *arg,
  void *private, caddr_t stack_base, size_t stack_size);
  /* 注意:没有进行“捆绑”操作的系统调用 */

    2. Windows NT
      NT线程的上下文包括:寄存器、核心栈、线程环境块和用户栈。
      NT线程状态
   (1) 就绪状态:进程已获得除处理机外的所需资源,等待执行。
   (2) 备用状态:特定处理器的执行对象,系统中每个处理器上只能有一个处于备用状态的线程。
   (3) 运行状态:完成描述表切换,线程进入运行状态,直到内核抢先、时间片用完、线程终止或进行等待状态。
   (4) 等待状态:线程等待对象句柄,以同步它的执行。等待结束时,根据优先级进入运行、就绪状态。
   (5) 转换状态:线程在准备执行而其内核堆栈处于外存时,线程进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。
   (6) 终止状态:线程执行完就进入终止状态;如执行体有一指向线程对象的指针,可将线程对象重新初始化,并再次使用。


                   

      图4  Windows NT的线程状态
  
  
      NT线程的有关API
   
      CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。
      ExitThread()函数用于结束本线程。
      SuspendThread()函数用于挂起指定的线程。
      ResumeThread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。

 

 

线程的基本概念 线程基本概念前言1.线程和进程的基本概念2.实现线程的方式(2种)3.进程的基本状态(运行中)4.简单说一下stop()和suspend()方法为何不推荐使用5.sleep()和wait()的区别6.synchronize7.同步准则8.线程死锁9.线程池10.程序、进程、线程之间的关系11.线程状态11.线程currentThread()与interrupt()方法的使用 前言 在此整理一下自己... 阅读详情

相关推荐

多线程基本概念

基本概念 进程 (Process):一个程序运行起来时在内存中开辟一段空间用来运行程序,这段空间包括 heap、stack、data segment 和 code segment。例如,开一个 QQ 就表明开了一个 QQ 进程。 线程 (Thread):每一个进程中都至少有一个线程。线程是指程序中代码运行时的运行路径,一个线程表示一条路径。例如 QQ 进程中,发送消息、接收消息、接收文件、...

程序员世杰 3337

什么是线程?

一、线程的基本概念 1、什么是线程:程序中负责执行的哪个东东就叫做线程(执行路线,进程内部的执行序列),或者说是进程的子任务。 2、线程与进程的区别 进程是一个资源单位,而线程是它的一部分。 线程它是轻量级的(只有栈),没有自己独立的内核资源、共享进程的代码段、数据段、堆、环境变量表、命令行参数、文件描述符、信号处理方式、当前工作目标、用户ID、组ID等资源,除了栈,其它都共享进程的。 3、一个进...

weixin_44041504的博客 1万+

ArcGIS栅格拼接全攻略:从核心原理到色彩平衡与大数据处理

在GIS数据处理中,栅格拼接是一项基础且关键的操作,其本质是将多幅具有重叠区域的栅格图像无缝整合为一张完整地图。该技术涉及空间参考统一、像元对齐与色彩融合等核心原理,是构建连续地理空间数据的基石。其技术价值在于保障数据完整性、提升可视化效果,并为后续的空间分析提供可靠底图。在遥感影像处理、数字高程模型构建及地图制图等应用场景中,高质量的拼接成果至关重要。本文聚焦于ArcGIS平台,深入解析其栅格拼接工具,并针对常见的色彩不一致与大数据量处理难题,提供了基于**色彩平衡**和**金字塔**优化的实战解决方案,

weixin_33158887的博客 262

线程(基础概念)

当一个程序进入内存运行时,即变成一个进程(Process)它是程序执行时的一个实例进程是处于运行过程中的程序。

张紫娃的博客 1758

4路QSFP28接口能玩出什么花样?基于璞致VU13P开发板的100G网络测试方案

本文详细介绍了基于璞致PZ-VU13P-KFB开发板构建100G网络测试方案的实战指南。该方案充分利用板载Xilinx Virtex UltraScale+ FPGA的强大算力与4路QSFP28接口,涵盖从光模块选型、Aurora协议配置、开源Corundum方案部署,到误码率测试及散热优化的全链路流程,为高速网络设备研发与验证提供了可靠的硬件平台。

cola5的博客 453

【论文学习】《Fully-Convolutional Siamese Networks for Object Tracking》2016年SiamFC 全卷积孪生网络用于目标跟踪

在这项工作中,我们脱离了跟踪中采用的传统在线学习方法,并展示了一种专注于在离线阶段学习强嵌入的替代方法。与在分类设置中的使用不同,我们证明,对于跟踪应用,孪生全卷积深度网络能够更有效地使用可用数据。这不仅反映在测试时,通过执行有效的空间搜索,也反映在训练时,其中每个子窗口都有效地代表一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时策略表现良好。我们相信这种方法是对更复杂的在线跟踪方法的补充,并期望未来的工作能够更彻底地探索这种关系。

SkyLeopard的博客 2418

线程的概念、优缺点和创建步骤

线程的概念、优缺点和创建步骤1. 什么是线程2. 线程共享资源与非共享资源3. 线程的优缺点4. 创建一个线程4.1 线程退出函数pthread_exit4.2 线程回收pthread_join4.3 杀死线程pthread_cancel4.4 线程分离pthread_detach4.5 判断两线程ID是否相等pthread_equal4.6 线程属性设置分离4.7 创建多个子线程5. 线程使用注意事项 1. 什么是线程 线程的概念:轻量级的进程,一个进程内部可以有多个线程,默认情况下一个进程只有一个线程

kuanyew的博客 1995

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 247

进程介绍及和线程的关系

1、进程的概念 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。简单来说,进程就是cpu调度的最小单位,是应用程序的执行实例。2、进程的状态 由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 状态之间的转换: 准备就绪的进程,被CPU调度执行,变成运行态; 运行中的进程,进行

eff666的博客 1413

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 500

ASPICE标准快速掌握「1.1. 简介」

ASPICE是汽车软件过程改进能力模型(Automotive SPICE,Automotive - Software Process Improvement and Capability dEtermination)的缩写,是一种针对汽车软件开发过程的国际标准。该标准旨在帮助汽车制造商和供应商改进其软件开发过程,以确保其软件产品的质量和安全性。需要做什么为什么要做技术上的依赖性是什么。

雪云飞星的博客 2292

java 线程的基本概念_Java线程的基本概念

在之前的章节中,我们都是假设程序中只有一条执行流,程序从main方法的第一条语句逐条执行直到结束。从本节开始,我们讨论并发,在程序中创建线程来启动多条执行流,并发和线程是一个复杂的话题,本节,我们先来讨论Java中线程的一些基本概念。创建线程线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈。下面,我们通过创建线程来对线程建立一个直观感受,在Java中创建线程有两种方式,一种是继承Th...

weixin_31560425的博客 306

电磁场仿真:电磁场基础理论_(13).微波技术基础

微波是指频率在300 MHz到300 GHz之间的电磁波。这一频率范围对应的波长为1米到1毫米。

2401_87715305的博客 1317

线程的基本概念和线程的使用方法

线程的基本概念 很多人会对程序、进程和线程之间理解比较含糊,在此先给出三者的概念: 程序:是一个指令的集合,意思就是我们为了完成特定的功能而编写的代码。 进程:是指程序的一次静态态执行过程, 每个进程都是独立的,且占用特定的地址空间。 线 程: 是进程中一 个 “ 单 一的连续 控 制 流 程 ”,是程序执行流的最小单元,线程又被称为轻量级进程。 进程和线程的区别: 1、进程是资源分配的基本单位,线程是程序执行的基本单位和任务调度的基本单位。 2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地

weixin_45684562的博客 677

嵌入式工程师成长之路(2)——电路设计

为什么你的电源模块总是发热炸机?DC/DC和LDO选型的“潜规则”你踩坑了吗? LM2596降压芯片用错电容导致输出振荡?LED恒流驱动设计让灯珠寿命缩水50%?24V转12V方案成本超预算被老板狂喷?——这些血泪教训,谁能懂得!

云轩阁 13万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

线程的基本概念及状态

线程的基本概念、线程的基本状态及状态之间的关系? 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源。 只拥有一点儿在运行中不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。     线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。     1.新建状态(New): 

patkritLee的博客 667

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

进程和线程基本概念

1 进程基本概念 1.1 多进程模型 多个进程是分时执行的,每个进程的指令流按顺序执行。 多个进程在一个处理器上分时运行,如图: 操作系统需要做的事情是:维护一个全局的进程表,记录下当前有哪些进程正在被执行;把时间分成适当的片段,现代处理器结构可以通过设置时钟中断,每次时钟中断到来时系统就会获得控制权,在进程间实施切换,即保留上一个进程的环境信息,恢复下一个进程的执行环境。 1.2 进程和程序 程序的内存布局结构 一个c/c++ 程序的典型布局结构,如图: 程序内存区域有三种类...

maomao171314的专栏 298

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java多线程——基本概念

线程和多线程 程序:是一段静态的代码,是应用软件执行的蓝本 进程:是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程 线程:是比进程更小的执行单位。进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念 主线程:(每个Java程序都有一个...

少说,多做。 1万+

java 线程的基本概念

这里写目录标题15.1 线程的基本概念15.1.1 创建线程1.继承Thread2.实现Runnable接口15.1.2 线程的基本属性和方法1.id和name2.优先级3.状态4.是否daemon线程5.sleep方法6.yield方法7.join方法8.过时方法15.1.3 共享内存及可能存在的问题1.竞态条件2.内存可见性15.1.4 线程的优点及成本参考目录 15.1 线程的基本概念        本节,我们介绍Java中线程的一

norang的博客 515

2.7线程的基本概念

meternal的博客 178

7.线程的基本概念

【代码】7.线程的基本概念。

qq_61673857的博客 810
上一篇: 在子线程中创建线程的方法
下一篇: 多线程修改VCL控件造成的ntdll.dll错
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值