当前位置:   article > 正文

Java每日面试题5题(一)—— 线程进程等相关篇_每天一个java面试题

每天一个java面试题

一、线程和进程的区别
  • 进程

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元

一个进程包括进程编号 PID(标识)进程的状态执行优先级上下文内存地址

  • 线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

  • 区别

1、从属关系不同:进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程。

2、描述侧重点不同:进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。

3、资源共享不同:多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符等信息,而线程可以共享进程资源文件(堆和方法区)。

4、上下文切换速度不同:线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),而进程的上下文切换的速度比较慢。

5、操纵者不同:一般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员。

在这里插入图片描述

二、说说多线程?
  • 什么是多线程

一个进程中包含多个线程执行不同的任务,线程是程序中一个单一的顺序控制流程,而多线程就是在单个程序中同时运行多个线程来完成不同的工作。

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在同一时间需要完成多项任务的时候实现的。

  • 优点

1、加快程序运行速度,响应快,将耗时长的任务在后台运行,不影响其他任务执行,提高效率。

2、同一个程序的不同部分可以并发执行,释放资源如内存占用。

3、可以设置线程的优先级。

  • 缺点

1、线程之间共享进程资源,容易造成死锁

2、开辟线程需要占用内存,同时多个线程之间切换占用时间也会耗费系统内存。

3、线程的终止会对程序产生影响。

4、对多个线程的管理带来额外的CPU开销,多线程的使用给系统带来上下文切换的额外负担。

三、说说怎么保证线程安全?
  • 产生线程安全的原因

多个线程在访问同一个共享资源时,所产生的原子性、可见性和有序性的问题,使用程序运行过程中出现超出预期的结果。

原子性:一个或多个操作在CPU执行的过程中断。
可见性:一个线程对共享变量进行修改之后,另一个线程不能马上看到,拿到旧值。
有序性:程序的执行顺序没有安装代码顺序执行。

  • 解决方法

1、使用加锁的形式实现线程互斥同步,如常用的synchronized、lock等

2、使用自旋CAS方式保证原子操作,实现共享变量的线程安全。

3、使用ThreadLocal实现线程之间的数据隔离。

4、尽量减少共享资源的使用。

四、说说死锁定义和死锁的条件
  • 定义

死锁是指两个及以上的进程在执行的过程中,由于竞争资源互不想让而造成一种阻塞的现象,若无外力作用,则无限陷入僵持的局面。

  • 死锁条件

1、互斥条件:进程之间互斥使用资源,一个资源只能一个进程使用,一旦某个资源被使用,则需要使用该资源的进程就会等待。

2、请求与保持条件:一个进程因请求资源发生阻塞时,不释放已有的资源。

3、不剥夺条件:进程在未使用完资源之前,其他进程不能抢夺该进程的资源。

4、循环等待条件:一组进程之间形成一种头尾相连的等待资源关系。

  • 解决方法

1、死锁预防:通过设置限制条件,破坏产生死锁的四个条件之一即可预防死锁的发生。

2、死锁避免:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,否则予以分配。这是一种保证系统不进入死锁状态的动态策略。比较出名的有银行家算法

3、死锁检测和解除:检测系统是否处于死锁状态,但处于死锁状态时,采取适当措施解除死锁

五、进程间的通信方式
  • 管道
  • FIFO
  • 消息队列
  • 信号量
  • 共享内存
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/522460
推荐阅读
相关标签
  

闽ICP备14008679号