多线程下载

1 什么是多线程  
        线程是指进程的一条执行路径 ,它包含独立的堆栈和 CPU 寄存器状态 ,每个线程共享所有的进程资源 ,包括打开的文件、信号标识及动态分配的内存等等。当一个程序开始运行时 ,它就是一个进程 ,进程是指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的 ,线程是程序中的一个执行流 ,每个线程都有自己的专有寄存器 (栈指针、 程序计数器等 ) ,但代码区是共享的 ,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流 ,即在一个程序中可以同时运行多个不同的线程来执行不同的任务 ,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。 
    多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,线程间互相独立。 

线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的线程共享一个存储空间,这使得线程间的通信远较进程简单。 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个 CPU,那么真的“同时”是不可能的,但是由于CPU 的速度非常快,用户感觉不到其中的区别是,因此我们只需要设想各个线程是同时执行即可。在 JAVA 中提供了类 java.lang.Thead 来进行多线程编程。 


2  多线程好处 

多线程的好处在于可以提高 CPU 的利用率 ,任何一个程序员都不希望自己的程序很多时候没事可干 ,在多线程程序中 ,一个线程必须等待的时候 , CPU 可以运行其它的线程而不是等待 ,这样就大大提高了程序的效率。 


3.多线程下载   

    多线程是将程序任务分成几个并行的任务, 由每个线程并发执行。当一个应用程序中的线程个数大于 1 时, 就称为多线程。当创建一个进程时, 操作系统会自动创建这个进程的第一个线程, 成为主线程。此后, 主线程可以创建其他线程, 进而实现多线程。多线程下载就是要创建多个下载的线程, 每个线程按分配的下载字节数, 下载文件的各个部分。


4.多线程下载的原理 

       多线程下载的前提是网络的连通和通信软件与协议的应用。 从服务器下载文件, 是客户端与服务器的交互过程, 采用的文件传输协议有多种, 最常见的是 HTTP (超文本传输协议)和 FTP (文件传送协议)。本软件是基于 HTTP 实现的。当向服务器发送 HTTP 请求成功后, 可以进行下载。采用多线程下载, 就是要创建多个下载线程, 分别下载文件的不同部分。在这个多线程下载工具的设计中, 创建了 3 个线程分别与服务器连接, 每个线程传输文件的一部分。 通过多个线程同时与服务器连接, 可以获取到较高的带宽。


      每个线程下载的数据都会保存在个自定义的一个 buffer 中,等待所有线程下载结束后,每个线程 buffer 中的内容会就写入到文件中,组合成一个完整的文件。 参见 6.3 线程下载类代码。 声明一个线程,再用循环的方式实现多线程。线程实现方式用以下二种方式: (1)声明一个 Thread 类的子类,并覆盖其 ren()方法。 
    Class mythread extends Thread 


         public void run( ) 
             { 
                  /*覆盖方法*/ 


(2)声明一个实现 Runnable 接口的类,并实现 run( )方法。 
   Class mythread implements Runnable 
       { 
          public void  run( ) 
               { 
                   /*实现该方法*/ 

}  
在多线程调度中,在此基础上用以下循环方式实现多个线程: 
    private void startDownFile() 
       { 
               //开始下载 
               down=new DownLoadThread[myDownInfo.getThreadNum()]; 
               for(int i=0;i<down.length;i++) 
               { 
                  down[i]=new DownLoadThread(myDownInfo,i);  
                  down[i].setPriority(7);  
                  down[i].start();  
               }   
       } 
        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值