中关村黑马程序员训练营 ---------- Io流与多线程相结合

 中关村黑马程序员训练营  ---------- 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();


  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值