" 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类 , 无法在 类外部调用 父类的 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...子类对象 , 父类指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二...); } 2、使用 子类对象 为 父类对象 进行初始化 定义父类对象 , 可以直接使用 子类对象 进行初始化操作 ; // II....类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent = child; 3、完整代码示例 #include "iostream" using namespace
就创建了一个SpringBoot项目,去掉了web模块。 遇到的问题 使用maven打包之后,但是其他引入了这个jar包之后的项目,是无法进行引入这个jar包里的对象的。...如下面这个gif图片所示: 遇到的问题展示: ?...解决办法 我也是从网上查的,解决办法如下: 原来默认的plugin打包使用的是: org.springframework.boot
A对象的时候父类会调用子类方法?...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。
进程树形结构 pstree 父子进程:在 Linux 操作系统中,进程形成树形关系,任务上一级进程是下一级的父进程,下一级进程是上一级的子进程。...子进程只执行指定的函数,其余内容均是父进程执行内容,但是子进程也拥有其他父进程资源。 各个进程在执行上互不影响,也没有先后顺序关系。 进程创建后,各个进程空间独立,相互没有影响。...multiprocessing 创建的子进程中无法使用标准输入(即无法使用input)。...资源 线程可以理解为进程中再开辟的分支任务 线程特征 一个进程中可以包含多个线程 线程也是一个运行行为,消耗计算机资源 一个进程中的所有线程 共享 这个进程的资源,可以对进程中的资源进行修改,见线程同步互斥...死锁产生条件展开说明 互斥条件:指线程使用了互斥方法,使用一个资源时其他线程无法使用。
当在某个线程中运行的代码创建一个新 Thread 对象时,新线程的优先级最初设置为创建线程的优先级,并且只有在创建线程是一个守护线程时,新线程才是守护线程。...(); // 子线程继承父线程的优先级属性 this.priority = parent.getPriority(); // classLoader if (security...id 自增 tid = nextThreadID(); } 从初始化源码中可以看到,很多属性,子线程都是直接继承父线程的,包括优先性、守护线程、inheritableThreadLocals...如果任何线程此对象上等待,它们中的一个被选择为被唤醒。 选择是任意的,并在执行的自由裁量权发生。 线程通过调用的一个对象的监视器上等待wait的方法。...唤醒的线程将无法继续进行,直到当前线程放弃此对象的锁。
2 线程组树的结构 JVM创建的system线程组是用来处理JVM的系统任务的线程组,例如对象的销毁等 system线程组的直接子线程组是main线程组,这个线程组至少包含一个main线程,用于执行main...方法 main线程组的子线程组就是应用程序创建的线程组。...一个线程可以访问其所属线程组的信息,但不能访问其所属线程组的父线程组或者其他线程组的信息。...,其父线程组为main线程组 ThreadGroup(ThreadGroup parent, String name) 根据线程组名称创建线程组,其父线程组为指定的parent线程组 两个构造函数的用法...如果数组太短无法保存所有的线程,额外的线程将被默默的忽略; 9.public int enumerate(ThreadGroup[] list) 分析:复制线程组中的活跃线程引用到它当前线程组及其子组中
在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs...注意,worker_threads创建的是子线程,而child_process创建的是子进程。 在child_process模块中,可以同步创建进程也可以异步创建进程。...当调用父进程中的 subprocess.disconnect() 或子进程中的 process.disconnect() 后会触发 disconnect 事件。...当出现无法创建进程,无法kill进程和向子进程发送消息失败的时候都会触发error事件。 当子进程结束后时会触发exit事件。 当子进程的 stdio 流被关闭时会触发 close 事件。...如果在通过stdio创建子进程的时候,这三个标准流被设置为除pipe之外的其他值,那么stdin,stdout和stderr将为null。
简介 nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建新的线程来执行自己的任务...注意,worker_threads创建的是子线程,而child_process创建的是子进程。 在child_process模块中,可以同步创建进程也可以异步创建进程。...当调用父进程中的 subprocess.disconnect() 或子进程中的 process.disconnect() 后会触发 disconnect 事件。...当出现无法创建进程,无法kill进程和向子进程发送消息失败的时候都会触发error事件。 当子进程结束后时会触发exit事件。 当子进程的 stdio 流被关闭时会触发 close 事件。...如果在通过stdio创建子进程的时候,这三个标准流被设置为除pipe之外的其他值,那么stdin,stdout和stderr将为null。
本文为宋宝华《Linux的进程、线程以及调度》学习笔记。 1 进程概念 1.1 进程与线程的定义 操作系统中的经典定义: 进程:资源分配单位。 线程:调度单位。...,子进程中fork()返回0,父进程fork()返回为子进程ID。...僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。...避免僵尸进程方法: 1、父进程调用wait()或者waitpid()等待子进程结束,这样处理父进程一般会阻塞在wait处而不能处理其他事情。...对于无MMU的CPU,无法应用COW,无法支持fork。 无MMU的CPU使用vfork创建进程,父进程将一直阻塞直到子进程exit或exec。
原来Linux使用了一种称为” 进程调度 “的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多的进程中挑选一个投入运行,其他进程暂时等待,当正在运行的那个进程时间耗尽...如何避免僵尸进程 1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起 2、如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后,父进程会收到该信号...运行时,系统简单地给第一个优先级为31的线程分配CPU时间,在该线程的时间片结束后,系统给下一个优先级为31的线程分配CPU时间。...当没有优先级为31的线程时,系统将开始给优先级为30的线程分配CPU时间,以此类推。...在同步方面:线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内进程中:子进程是父进程的复制品,子进程获得父进程数据空间、堆和栈的复制品。
线程组 ThreadGroup 我们前面已经讲了线程池,并且我们知道线程池是为了在子线程中处理大量的任务,同时又避免频繁的创建和销毁线程带来的系统资源开销而产生的。 那么线程组呢?...是否为守护线程组(daemon)…… 下面来看一下 ThreadGroup 中常用的方法: // 创建一个指定名称(name)的新线程组,以调用这个构造方法的线程所在的线程组作为父线程组 ThreadGroup...int enumerate(ThreadGroup[] list) // 将当前线程组(不包括本身)中的子线程组拷贝到参数指定的线程组数组中,如果 recurse 参数为 true, // 那么会递归将其子线程组中的子线程组也拷贝...g) // 将线程组设置为守护线程组或者普通线程组 void setDaemon(boolean daemon) // 设置当前线程组中线程允许的最大优先级,线程组中已经存在的优先级大于这个...Thread.MAX_PRIORITY,那么会被忽略, // 如果当前线程组的父线程组不为 null,那么当前线程组的最大优先级设置为 pri 和父线程组优先级较小的那一个, // 否则直接设置为 pri
2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。...线程的优先级及设置 线程的优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。 一个线程的优先级设置遵从以下原则: 线程创建时,子继承父的优先级。...线程创建后,可通过调用setPriority()方法改变优先级。 线程的优先级是1-10之间的正整数。...在java中每个对象都有一个锁,一旦这个线程获得了这个对象的锁,这里的锁还有具体分为锁定类实例、锁定类对象两种不同的锁,针对不同的锁会限制其他线程对资源的访问,其他线程则在这个线程没有释放这个对象锁之前去访问锁定的资源了...但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。 这样就基本把java中涉及到的多线程都归纳了。
创建进程:首先要导入multiprocessing中的Process:创建一个Process对象; 创建Process对象时,可以传递参数; 多进程 相关知识 Unix/Linux操作系统提供了一个fork...子进程永远返回0,而父进程返回子进程的ID。...这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID 创建一个线程 创建一个线程 from multiprocessing...通过上面的结果比较可以知道,当多线程中需要“独占资源”的时候,要使用锁来控制,防止多个线程同时占用资源而出现其他异常 使用锁的时候就调用acquire()方法,以此告诉其他线程,我正在占用该资源,你们要等会...多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程 多进程模式的缺点是创建进程的代价大,在Unix/Linux系统下 多线程模式通常比多进程快一点,但是也快不到哪去,而且
当在某个线程中运行的代码创建一个新 Thread 对象时,新线程的优先级最初设置为创建线程的优先级,并且只有在创建线程是一个守护线程时,新线程才是守护线程。...2.2 线程的优先级 优先级代表线程执行的机会的大小,优先级高的可能先执行,低的可能后执行,在 Java 源码中,优先级从低到高分别是 1 到 10,线程默认 new 出来的优先级都是 5,源码如下:...分别为最低,普通(默认优先级),最大优先级 2.3 守护线程 创建的线程默认都是非守护线程。 创建守护线程时,需要将 Thread 的 daemon 属性设置成 true ?...(); // 子线程继承父线程的优先级属性 this.priority = parent.getPriority(); // classLoader if (security...id 自增 tid = nextThreadID(); } 从初始化源码中可以看到,很多属性,子线程都是直接继承父线程的,包括优先性、守护线程、inheritableThreadLocals
原来Linux使用了一种称为” 进程调度 “的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多的进程中挑选一个投入运行,其他进程暂时等待,当正在运行的那个进程时间耗尽...如何避免僵尸进程 1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起 2、如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后,...运行时,系统简单地给第一个优先级为31的线程分配CPU时间,在该线程的时间片结束后,系统给下一个优先级为31的线程分配CPU时间。...当没有优先级为31的线程时,系统将开始给优先级为30的线程分配CPU时间,以此类推。...在同步方面:线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内进程中:子进程是父进程的复制品,子进程获得父进程数据空间、堆和栈的复制品。
: 对于redis来说创建的线程来说,会将clone_flags中的CLONE_FILES标记位设置为1,即子进程共享父进程的打开文件列表资源: copy_mm: 子进程是否需要对父进程的地址空间进行深拷贝...中创建进程时,不会将CLONE_VM标记设置为1,因此进行的是深拷贝: 地址空间是进程线程最核心的东西,每个进程都有独立的地址空间 redis中创建线程时,会将CLONE_VM标记设置为1,...因此子进程共享父进程的地址空间: 在创建进程或线程的时候,还可以让内核帮我们创建独立的命名空间。...可以在不支持线程的操作系统中实现。 当用户级线程发生IO或页面故障引起的阻塞时,由于操作系统无法感知用户级线程存在,所以会直接进行进程切换,而不是切换到进程中另一个线程继续执行。...但是由于内核级线程线程切换需要进入内核态完成,因此切换代价大。 进程中某一线程的阻塞不会影响当前进程中其他线程的调度执行。
b.当jvm应用中没有运行的用户线程时,守护线程会结束运行。...,则守护线程会被改变成用户线程,线程的优先级也会被设置成普通线程的优先级。...ExecuteService主要是用来管理线程的,不能创建线程。 e.守护线程具有传递性,当线程设置成守护线程了,那么它的子线程也是守护线程。...深复制把要复制的对象所引用的对象都复制了一遍 父子类的异常处理 1、对于子类构造器: 1.由于无法捕获父类构造器异常,所以必须抛出大于或等于父类构造器抛出的异常 2.可以新增其它异常 2、对于子类方法...: 1.可以选择不抛出异常 2.抛出异常则必须遵从父类方法抛出的异常(异常类型小于等于父类异常,因为在向上造型为父类类型时,调用此方法,会出现父类无法处理的异常类型) 3.不可抛出新的异常(原因同上
异步信号,发送信号给某进程后,直到该进程被调度后才会执行信号回调(为安全起见,杀死进程的动作是进程自己执行的,内核不能通过信号强制杀死对方)。进程消亡会发送SIGCHLD给父进程,发送动作无法取消。...无法通过信号唤醒正在睡眠的进程。 wait 等待任意子进程结束并回收子进程资源。...进程消亡会发送SIGCHLD给父进程,发送动作无法取消。 无法通过信号唤醒正在睡眠的进程。 wait等待任意子进程结束并回收子进程资源。...OpenHarmony内核中的线程采用抢占式调度机制,同时支持时间片轮转调度和FIFO调度方式。 OpenHarmony内核的线程一共有32个优先级(0-31),最高优先级为0,最低优先级为31。...Running→Ready: 有更高优先级线程创建或者恢复后,会发生线程调度,此刻就绪列表中最高优先级线程变为运行态,那么原先运行的线程由运行态变为就绪态,并加入就绪列表中。
领取专属 10元无门槛券
手把手带您无忧上云