中关村黑马程序员训练营 ---------- Io流与多线程相结合
.------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
在IO包中有个类叫管道流 输入管道流 与输出管道流可以直接进行连接,并与多线程结合使用
一条线程负责管道输入流 ,另一条线程负责管道输出流,二者可同时进行
现以一事例来说明 io流与多线程的相结合程序代码:
步骤:1.建立两个子线程Read和Write 都实现了Runnable 并覆盖了接口Runnable的方法run()
2.建立Thread类的两条线程的对象 Thread t1 = new Thread(); Thread t2 = new Thread();
3.建立两条线程的对象 Read r = new Read(); Write w =new Write();并把对象r w作为参数传入到Thread类的两个对象里
4.调用Thread类的方法start()开启线程,并调用两个线程的run()方法
5.建立两个管道输入输出流的对象PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
6. 并把两个对象作为参数传入两个子线程的对象里 同事两个管道输入输出流还要相互连接 同过connect方法来进行连接
import java.io.*;
//子线程Read实现了Runnable 并覆盖了接口Runnable的方法run()
class Read implements Runnable
{
private PipedInputStream pis;
Read(PipedInputStream pis)
{ this.pis = pis;
}
public void run()
{
try
{
byte[] buf = new byte[1024];
int len = pis.read(buf);
//数据都读到数组byte[] buf里 读一次 把数组的数据打印输出一次
// String s = new String(buf,0,len);
System.out.println(new String(buf,0,len));
pis.close();
}
catch (IOException e)
{
throw new RuntimeException("管道读取输入流异常");
}
}
}
//子线程Write实现了Runnable 并覆盖了接口Runnable的方法run()
class Write implements Runnable
{
PipedOutputStream pos;
Write(PipedOutputStream pos)
{
this.pos = pos;
}
public void run()
{
try
{ Thread.sleep(6000);
pos.write("管道输出流,正常,写数据".getBytes());
pos.close();
}
catch (Exception e)
{
throw new RuntimeException("管道输出流异常");
}
}
}
class Piped
{
public static void main(String[] args) throws IOException
{
//本类 建立的对象pis pos作为参数传入装饰类的对象里,让两个管道流相连
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
pis.connect(pos);
//建立子线程对象 r w,把管道流对象 pis pos 作为参数传入
Read r = new Read(pis);
Write w =new Write(pos);
//建立父类线程对象 t1 t2 并开启线程 start()
Thread t1 = new Thread(r);
Thread t2 = new Thread(w);
t1.start();
t2.start();
}
}