合并流 多线程

合并流 — SequenceInputStream
功能: 可以把多个文件读成(合并)成一个流
需要使用到 Vector的特殊迭代器 该Vector中保存的是InputStream的子类

    File f1 = new File("/Users/lanou/Desktop/Test/1.txt");
    File f2 = new File("/Users/lanou/Desktop/Test/2.txt");
    File f3 = new File("/Users/lanou/Desktop/Test/3.txt");
    Vector<FileInputStream> vector = new Vector<>();
    vector.add(new FileInputStream(f1));
    vector.add(new FileInputStream(f2));
    vector.add(new FileInputStream(f3));
    Enumeration<FileInputStream> elements = vector.elements();
    SequenceInputStream sis = new SequenceInputStream(elements);
    FileOutputStream fos = 
    new FileOutputStream("/Users/lanou/Desktop/Test/4.txt");
    byte[] b = new byte[1024];
    int len = 0;
    while ((len = sis.read(b)) != -1) {
        fos.write(b, 0, len);
    }
    sis.close();
    fos.close();

多线程
进程: 一个正在运行的程序(独立运行的程序)
进程中可以有单个线程 — 绝对安全 程序由上至下依次执行 效率不高
也可以有多个线程
线程: 相当于一个CPU的执行路径(大大提升了处理效率)
一个独立的运行单元

分时调度: CPU在不同线程之间进行切换
抢夺资源: 改变线程的优先级
并发执行: 同时进行

代码开启线程
JVM调用main方法 —> 找操作系统(CPU) —> 开启一个执行路径
main就是一个线程 main是线程的名字 又叫主线程

开启线程的两个方法
1.将类声明为 Thread 的子类

class MyThread extends Thread{

    public MyThread() {
        super();
        // TODO Auto-generated constructor stub
    }

    public MyThread(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) { 
            // 获取当前线程名字 getName()
            System.out.println(getName() +"--"+ i);
        }
    }
}

2.声明实现 Runnable 接口的类

class MyThreadTwo implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            // 获取当前线程名字 Thread.currentThread().getName()
            System.out.println
            (Thread.currentThread().getName() + "--" + i);
        }
    }

}

分别在main函数中创建

        // 创建线程 1
        MyThread mt = new MyThread("线程1");
        mt.start();

        // 创建线程 2
        MyThreadTwo mtt = new MyThreadTwo();
        Thread thread = new Thread(mtt, "线程2");
        thread.start();
        }

注意: 在main函数中创建线程时 直接调用线程中的fun()方法 相当于把线程当成一个普通函数 是不会创建出线程的 需要用start()方法才会创建出线程
在创建线程的方法1中 因为是继承Thread的 而构造方法又不能被继承 所以在给线程1附上名字的时候 需要在进程1的方法中重写构造方法才能附上名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值