-
java core第二次第2页,关于流的两个问题?0
引用inputStream的read()和write()方法在执行时都将阻塞,直至字节确实被读入或写出.这就意味着如果流不能被立即访问,那么当前的线程将被阻塞.这使得这个方法等待指定的流变为可用的这段时间里,其他的线程就有机会去执行有用的工作.
阻塞的情况下,其他的线程是没有机会去执行
引用available方法使我们可以去检查当前可用于读入的字节数量,这意味着像下面这样的代码片段就不可能被阻塞:
int byteavailable=in.available();
if(byteavailable>0){
byte[] data=new byte[byteavailable];
in.read(data);
}
这段代码不阻塞,又是什麽意思啊?
问题补充:上面少打了几个字:
阻塞的情况下,其他的线程是没有机会去执行才对啊?2012年9月07日 12:52
2个答案 按时间排序 按投票排序
-
采纳的答案
摘自InputStream javadoc
引用available()
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。下一个调用者可能是同一个线程,也可能是另一个线程。一次读取或跳过此数量个字节不会发生阻塞,但读取或跳过的字节可能小于该数。
即表示我们可以一次性不阻塞拿到的字节量。
引用read()
从此输入流中将 len 个字节的数据读入一个 byte 数组中。如果 len 不为 0,则在输入可用前,此方法将阻塞;否则,不读取任何字节并且返回 0。
比如从控制台输入 我们调用read可能发生阻塞
你的第一个问题:
当A线程读字节发生阻塞,则等待让出CPU周期,B线程这时候可以使用CPU完成其他工作。 线程并发问题。
第二个问题
available 即表示我们可以一次性不阻塞拿到的字节量。读这些数量的字节不会发生阻塞。
阻塞的情况下,其他的线程是没有机会去执行才对啊?
这个理解有误,A线程阻塞, 即A让出CPU周期,此时其他线程可以使用CPU周期了。
线程之间是并发执行。只要有些线程让出CPU 其他线程才能工作。
A(读取字节 发生阻塞)和B(这个可能在计算1+2+....+1000 ) 两者可能是无关的任务2012年9月07日 13:26
相关推荐
### Java Core及底层面试问题概览 #### 一、JAVA面向对象 面向对象是Java语言的核心特性之一,它强调的是将复杂的问题抽象成简单的对象,然后通过这些对象之间的交互来解决问题。 1. **封装**: 封装是面向对象的...
### CoreJava概述与关键知识点 #### 一、从面向过程编程到面向对象编程的思维转变 在编程领域,有两种主要的编程范式:面向过程编程和面向对象编程。前者更侧重于程序流程的设计,通常围绕着一系列算法和过程展开...
规律:一个数等于前两个数之和 //计算斐波那契数列(Fibonacci)的第n个值 public class Fibonacci{ public static void main(String args[]){ int n = Integer.parseInt(args[0]); int n1 = 1;//第一个数 int n2...
其中最重要的两个环境变量是`JAVA_HOME`和`CLASSPATH`: - `JAVA_HOME`:指定JDK的安装位置,这是编译器和其他Java工具查找JDK安装目录的地方。 - `CLASSPATH`:指定Java运行时查找用户自定义类或包的位置。默认...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
分页通常涉及两个主要参数:每页显示的记录数(pageSize)和当前页码(pageNumber)。 二、JSP分页类设计 在Java JSP中,我们通常会创建一个专门的分页类,用于封装分页逻辑。这个类可能包含以下属性和方法: 1. ...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
### CoreJava基础知识详解 #### 一、环境变量与配置 **1.1 字节码与虚拟机** - **字节码**: Java 编译器编译后的中间代码,是一种二进制格式,由一系列指令组成,这些指令是高度优化的,可以在任何支持Java虚拟机...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
#### 四、第一个Java程序 下面是一个简单的Java程序示例: ```java public class MyFirstJava { public static void main(String[] args) { System.out.println("Hello World"); } } ``` - **类名**:必须与...
当系统将要发生内存溢出异常前,会把这些对象列入回收范围之中进行第二次回收,如果这次回收后还没有足够的内存,才会抛出内存溢出异常。 - **弱引用(Weak Reference)**: 弱引用与软引用的区别在于:只具有弱引用...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...