Java基础题:java并发相关
发布日期:2021-05-08 06:39:07 浏览次数:27 分类:精选文章

本文共 1260 字,大约阅读时间需要 4 分钟。

并发控制

CopyOnWriteArrayList 适用于写少读多的并发场景。ReadWriteLock 是一个读写锁,它要求写与写之间互斥,读与写之间互斥,但读与读之间可以并发执行。在读多写少的情况下,可以显著提高效率。ConcurrentHashMap 是一个同步的 HashMap,读写都需要加锁。volatile 只能保证多线程操作的可见性,但不能保证原子性。

i++ 不是原子操作,它包括三个步骤:从内存读取变量值到CPU寄存器、在寄存器中自增1、将寄存器值写回内存。由于这些操作不具备原子性,可能导致多线程环境下数据不一致。

sleep和wait

sleep() 来源于 Thread 类,而 wait() 来源于 Object 类。sleep() 不释放锁,而 wait() 会释放锁。sleep() 会在时间到来后自动恢复,而 wait() 可以通过 notify() 或 notifyAll() 进行唤醒。notify() 唤醒一个线程,notifyAll() 唤醒所有线程。

可重入函数

可重入函数可以被中断,并允许多个副本在运行,它们使用分离的栈,不会互相干扰。可重入函数通常需要访问全局变量,因此需要通过信号量等机制进行保护,以确保互斥。

文件操作

要读文件,首先需要使用 open 系统调用打开文件。read 系统调用使用的参数包括文件描述符 fd、缓冲区首址 buf 和传送的字节数 n。read 从 fd 指示的文件中读取 n 个字节,并将它们写入 buf 缓冲区。

进程状态

进程的基本状态包括就绪状态、执行状态和阻塞状态。就绪状态是进程等待 CPU 的状态;执行状态是进程正在使用 CPU 的状态;阻塞状态是进程因等待 I/O 设备或其他资源而暂停的状态。

缺页中断

当所读文件的数据不在内存时,会产生缺页中断。中断处理导致当前进程进入阻塞状态,等待数据从外存调入内存。只有当所需数据到达时,进程才会被唤醒。

读写锁状态

读写锁在写加锁状态时,所有试图加锁的线程都会被阻塞。在读加锁状态时,只有以读模式加锁的线程可以获得访问权,写模式加锁的线程会被阻塞。读锁在读模式下如果有写请求,会阻塞后续的读请求,以避免长时间占用。

高响应比调度算法

高响应比调度算法综合了短作业优先和先到先服务的特点。作业的响应比由等待时间和执行时间决定。短作业优先提高了响应比,但可能导致长作业饥饿。高响应比算法通过动态调度权重平衡,确保长作业等待后仍能获得调度。

锁机制中的活跃度失败

活跃度失败可能包括饥饿、信号丢失、活锁和死锁。饥饿是指线程需要资源但长期得不到。信号丢失是指等待信号的线程因其他线程未正确释放信号而一直等待。活锁是由于条件不满足而一直重试。死锁是互相等待对方释放资源的状态。

进程与线程

父进程和子进程有独立的地址空间。父进程结束后,所有子进程也会结束。进程结束后,所有线程也会结束。多个进程同时占有对方所需资源而导致互相等待时,会发生死锁。死锁通常指进程间的死锁,多线程也可能引起死锁。

上一篇:Java基础题:反射相关知识(getDeclaredMethods)
下一篇:Java基础题:GBK到UTF-8的编码字节流转换

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月14日 20时55分29秒