多线程入门

来源:互联网 发布:手机淘宝社区首页 编辑:程序博客网 时间:2024/04/30 03:55

从学java到现在,还没有做过类似的多线程下载,如果只是看看书,就认为自己已经掌握了多线程的话,那就是自己欺骗自己,到现在我自己依然对多线程不怎么了解,所以就有了这篇文章,相当于入门吧,好了废话不多说。

一:我们先来认识认识这个类URL。

URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询

更多信息请移步: http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html

首先,我们看看构造函数:

                       URL(String spec)   根据 String 表示形式创建 URL 对象。

这应该是比较常用的一个构造函数了,他的用法可以是这样:

URL url  = new URL(path); 

path:http://www.cqwu.edu.cn,可以是这样的。

好了,当我们拥有了URL对象后,我们再来看看URLConnection类。这个类的对象代表了与URL连接的远程对象。这个URLConnection类的一些方法:

getContentLength()返回 content-length 头字段的值。获取长度
           getConnectTimeout()返回连接超时设置。

这里就看看我们需要用到的这两个方法,

如何获取这个URLConnectioon对象呢?

URL类有一个openConnection()方法,我们可以通过此方法获取。其中有很多我不是很理解的地方,待以后自己慢慢理解。

万事开头难,我们的第一步算是走出去了,接下来我们继续。

二:线程下载。

写一个线程类,我们可以有三种方式:

1、实现Runnable接口

2、继承父类Thread类

3、实现Callable接口

现在,我这里是继承父类Thread类

如:public class DownThreads extends Thread {}

在这里我们要重写父类Thread类的run()方法,在里面写上我们的线程要执行的内容,我们要实现的是多线程下载,所以我们还要把资源划分为几部分。现在我们的大致思路就是如此了。但是,我得承认这思路太简单了,光这个怎么能写出来呢?

接下来,我们再细细讲解。

二(1):现在我们想想,获取了连接对象,那怎么把我们所需要的资源给传到我们电脑本地磁盘呢?那我们就得谈谈I/O流了,不过这里不详细,可以自己到网上获  取相关资源。这里我们使用RandomAccessFile类:此类的实例支持对随机访问文件的读取和写入。还有一InputStream类。

 这里我们的输入流对象可以通过URLConnection对象的getInputStream()方法获取。而RandomAccessFile类作为输出流。这两个类基本实现我们的需求。接下来我们需要讲解一下一些小的注意事项。

二(2):1、分清每一个线程的的开始下载位置,我们可以使用RandomAccessFile类的

                                                seek(long pos) (设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作)

方法定位线程的下载的位置,

  2、当我们分好了每个线程的下载任务,我们就需要注意,在读取的时候每个线程的开始读取的位置是不一样的,我们可以使用InputStream类的skip(long n)方法跳过不是线程自己的任务,跳到自己负责的那部分文件。

 3、当我们写到本地磁盘的时候需要注意,在我们使用

                write(byte[] b, int off, int len)   (将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。)
           应该注意每次写入的长度大小,

good luck!



                                            

0 0
原创粉丝点击