操作系统 | 面试整理

本文详细探讨了并行与并发的区别,深入解析了进程与线程的概念及状态,包括进程调度算法。接着介绍了Java中创建线程的三种方式,分析了Runnable与Callable的区别,以及线程方法start()与run()的使用场景。此外,讲解了线程同步相关概念,如wait()、notify()、notifyAll()和锁机制,包括死锁的预防与避免。最后,讨论了Java中确保线程安全的方法和读写锁的应用。
摘要由CSDN通过智能技术生成


一、概述

并行和并发的区别

  • 并行:同一时刻,两件或多件事同时发生
  • 并发:同一个时间段内,一起发生,走走停停

二、进程

进程和线程的区别

  • 进程包含线程
  • 进程:资源分配的基本单位;线程:处理机调度基本代为

进程生命周期

创建、就绪、运行、阻塞、终止

  • 就绪:缺少处理机资源
  • 阻塞:缺少除了处理机以外的资源

线程的6中状态

创建、就绪、运行、阻塞blocking、等待waiting、终止

就绪、阻塞的区别

缺少处理机资源;处理机以外的资源

进程调度算法

  • FCFS先来先服务(当时我答的是FIFO,虽然是同一个意思但操作系统用FCFS专业一些)
  • 优先级调度(当时没想起来)
  • 时间片轮转法 Linux系统用的就是
  • 多级反馈队列调度算法
    注意:短作业、高响应比都是作业调度算法,不是进程调度算法

三、线程

3种启动线程的方法

  • 实现Runnable接口
  • 继承Thread接口
  • 通过Callable和Future创建线程

Runnable和Callable的区别

  • runnable提供run()方法,无返回值;callable()提供call方法,有返回值
  • runnable不能通过throws抛出异常;callable可以直接抛出Exception异常

线程run()和start()的区别

  • start:会创建新的线程,并且执行在 run()方法里的代码
  • run:如果直接调用 run()方法,它不会创建新的线程,也不会执行调用线程的代码

sleep()和wait()的区别

都是等待

  • wait:等待别人,等待别的线程;通常是线程间交互的时候用;会释放锁
  • sleep:自己sleep,通常是线程自己暂停执行的时候用;会持有锁

notify() notifyAll()的区别

都是用来唤醒线程的

  • notify():唤醒单个线程
  • notifyAll():唤醒多个线程,然后多个线程公平竞争

守护线程是什么

  • 线程分为用户线程和守护线程
  • 守护线程是一个服务线程,当所有的用户线程停掉的时候,守护线程才可以停

三-2、多线程

Java如何保证多线程安全

线程安全的集合类
Vector、StringBuffer、ConcurrentHashMap


四、锁

什么是死锁

因为多个进程相互竞争资源、进程之间相互,而导致的一种进程之间相互等待的僵局。

如何防止死锁

死锁预防 静态

破坏死锁的4个必要条件:互斥、不可剥夺、请求并保持、循环等待

死锁避免 动态
  • 银行家算法:先试探性地分配资源,然后计算系统是否处于以一个安全状态,安全就分配,不安全就不分配
  • 系统不安全:不一定就会发生死锁

synchronized

同步锁

如何实现互斥锁

互斥:当进程进入临界区的时候,另一个进程不允许进入,需要等待,当占用临界资源的进程退出后,另一个进程才能进入。

Java中的乐观锁和悲观锁的区别

:一般在读写数据的时候用到,目的都是为了维护数据的一致性,
悲观锁:认为每次我去取数据的时候,都有另一个进程来修改我要读取的数据,如果要连续读取2次,那就导致数据的不一致。为了防止这种情况,在读取数据之前都会上锁,防止数据被别的进程修改。相对来说比较安全,但是没有这么快
乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁。但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

公平锁和非公平锁

公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁
非公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁
举例子:超时排队

你对读写锁的了解

对文件读写的时候需要用到读写锁,读读不加锁,读写、写写加锁
读写锁“读读不互斥”,但只能有一个写进程,只有有写进程,就必须上锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值