Linux 管道通信机制
管道(Pipe)本质上是内核管理的一个固定大小缓冲区。它虽然对进程表现为文件,但并非普通文件,也不属于磁盘文件系统,而是独立存在于内存中的特殊通信机制。
管道采用半双工模式,数据只能单向流动。同一时刻仅支持一个方向的传输,无法同时双向通信。其容量通常受限于系统内存页大小,而非磁盘空间。当管道写满时,写入进程会被阻塞;读空时,读取进程同样会等待,直到另一端有数据或关闭连接。若两端进程均终止,管道自动销毁。
Java finally 块返回值行为
在 Java 中,finally 块的执行时机常被误解。很多人以为它在 return 之后执行,实际上它在返回前完成所有操作。关键在于返回值是如何传递的。
场景一:修改局部变量
public class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally() {
int a = 0;
try {
a = 1;
return a;
} finally {
a = 2;
}
}
}
输出结果为 1。
底层逻辑是:当 try 块遇到 return 时,JVM 先将返回值压入临时栈,然后跳转执行 finally。此时 finally 中修改 a 为 2,只是改变了局部变量,并未更新临时栈中的返回值。执行完 finally 后,主程序从临时栈取出原值返回。
场景二:finally 中有 return
public class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally() {
int ;
{
a = ;
a;
} {
a = ;
a;
}
}
}

