最近我开始学习Java,对于IO流和线程有一个问题。在我们的语言中,这两个定义都被翻译成“Поток”,这让我感到困惑。
我想了解这两个主题的概念:流和线程。我会提供一个例子来展示我的观点。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
try{
FileOutputStream fos = new FileOutputStream("C:\\Users\\TMS\\Desktop\\Workspace\\src\\File.txt");
FileInputStream fis = new FileInputStream("C:\\Users\\TMS\\Desktop\\Workspace\\src\\FileWithInfo");
int supnum = 0;
try{
while((supnum = fis.read()) != -1){
fos.write(supnum);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
据我理解,我创建了两个类的实例:FileOutputStream 和 FileInputStream。这些类的实例可以作为“控制器”,帮助我们通过提供方法(例如.write 和 .read)来控制流,并且同时隐式地让Java与处理器交互,告诉处理器创建新的流(我不确定,但如果我们创建大量的流,可能会在任务管理器中看到它们)。
因此,最终我们拥有一个链:
1. 帮助我们控制流的类的实例。 2. 我们用于传输数据的流。 3. 我们用于读取或写入信息的文件。
如果我们谈论线程,这个链几乎是相同的:
public class Program {
public static void main(String[] args) {
System.out.println("Main thread started...");
Runnable r = ()->{
System.out.printf("%s started... \n", Thread.currentThread().getName());
try{
Thread.sleep(500);
}
catch(InterruptedException e){
System.out.println("Thread has been interrupted");
}
System.out.printf("%s finished... \n", Thread.currentThread().getName());
};
Thread myThread = new Thread(r,"MyThread");
myThread.start();
System.out.println("Main thread finished...");
}
}
我们有一个实例(myThread),它帮助我们使用方法来控制线程。
我所看到的区别是,流只能用于数据传输,而线程是一个更复杂的工具,允许我们将它们用作额外的.main(String [] args)方法。
我想知道:
我的猜测正确吗?
- 如果不是,这些术语之间的区别是什么?
为什么与IO相关的类不像Thread类一样实现Runnable接口?
我们可以像使用流一样使用线程传输数据吗?