码迷,mamicode.com
首页 > 其他好文 > 详细

实现所需关键技术

时间:2016-03-31 16:34:58      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

Java多线程技术

多线程是这样一种机制,它允许在程序中并非执行多个指令流,每个指令流都被称为一个线程,线程间相互独立。

在Java中提供了java.lang.Thread来进行多线程编程。在基于Java的应用程序中可以通过以下两种方式来创建线程对象。

  1. 声明一个Thread类的子类,并覆盖其run()方法。
  2. 声明一个实现Runnable接口的类,并实现run()方法。

Thread类提供了大量的方法来控制线程的执行过程。要触发一个新的线程,需要调用start()方法。在调用start()方法时,讲创建一个新的控制线程,新线程进入可运行状态,它将向线程调度器注册这个线程,然后它将调用run()方法。

Thread中定义的一些方法:

方法

说明

start()

新建的线程进入可运行状态

run()

线程进入正在运行状态

wait()

线程进入等待状态,等待被唤醒

notify()/notifyAll()

唤醒其他的线程

yield()

线程放弃执行,使其他优先级不低于此线程的线程有机会运行

getPriority()/setPriority()

获得/设置线程的优先级

suspend()

挂起该线程

resunme()

唤醒该线程,与suspend()方法相对

sleep()

线程睡眠指定的一段时间

join()

调用这个方法的主线程,会等待加入的子线程完成

?

详细可以看下别人的博客:http://www.cnblogs.com/dolphin0520/p/3920357.html

在实现下载工具系统的过程中,需要定义一个线程下载类,这也是该系统的核心技术。下面是线程现在类的大框架。

/**

* 下载线程类

*/

public class DownLoadThread extends Thread{

????public DownLoadThread(DownLoadInfo downInfo, int threadId){

????????//构造函数

????}

?

????/**

???? * 获取线程下载是否结束标志

???? */

????public boolean ifFinished(){

????????return finished;

????}

?

????/**

???? * 获取线程下载是否出错标志

???? */

????public boolean isError(){

????????return err;

????}

?

????//覆盖Thread类中的run()方法

????public void run(){

????????/**

???? ???? * 实现根据下载的起始位置和结束位置下载文件某一段的逻辑代码

???? ???? */

????}

}

?

Java I/O流技术

为了进行数据的输入/输出操作,Java中把不同的输入/输出源抽象表述为"流"(stream)。Java.io包中定义了多个流类型来实现输入/输出功能。

按照流的方向划分,可以分为输入流和输出流。

  • 输入了:只能从中读取字节数据,而不能向其写入数据。
  • 输出流:只能向其写入数据,而不能从中读取数据。

按照流所处理的数据类型划分,可以分为字节流和字符流。

  • 字节流:用于处理字节数据。
  • 字符流:用于处理Unicode字符数据。

按照流是否可以直接访问资源划分,可以分为节点流和处理流。

  • 节点流:可以从(向)一个特定的I/O设备读(写)数据的流,节点流也被称为低级流。
  • 处理流:用来实现对一个已存在的流的连接和封装,是通过所封装的流的功能,调用实现数据读/写操作的流,处理流也被称为高级流。

Java.io包支持两种类型的流,包括二进制数据的字节流和包括字符数据的字符流。在读/写数据时,这两种流以不同的方式工作。

在java.io包中,InputStream和OutPutStream类及它们的子类均表示字节流,并且提供了读/ 写二进制数据的方法。

InputStream类中包含3个read()方法,用来从数据流中读取二进制数代码。

输入流的基本方法:

  • read(),这个方法在InputStream类中是抽象的,因此它必须定义在子类中。此方法以int类型返回流的下一个可读字节。如果到达流的末尾,则方法的返回值为-1,如果I/O发送错误,将抛出IOException类型异常。
  • read(byte[] array),此方法将流中字节读到数组的连续元素中,读出的字节数据最大为array.length的值。在读取完输入数据或是检测到流尾时,才从本方法返回。本方法返回读取的字节个数,或者如果因为到达流尾而没有读取任何字节则返回-1,。如果I/O发送错误,将抛出IOException类型异常。如果传给方法的参数为null,则派出NullPointerException异常。
  • read(byte[] buffer, int offser, int length),此方法将数据读入一个字节数组,从数组的offert指定的位置开始存放,并用length来指定读取的最大字节数。

输入流的其他方法如下:

  • void close(),关闭流。
  • int available(),返回可以从中读取的字节流。
  • long skip(long n),在输入流中跳过n个字节,将实际跳过的字节数返回。
  • boolean markSupported(),判断流是否支持标记功能、
  • void mark(int readlimit),在支持标记的输入流的当前位置设置一个标记。
  • void reset(),返回到流的上一个标记。

?

OutputStream类包含3个write()方法,用来向数据流写入二进制代码。这些操作与InPutStream类的read()方法向对应。

输出流的基本方法:

  • void write(int c)
  • void write(byte[] buffer)
  • void write(byte[] buffer, int offdet, int length)

?

详细可以看下别人的博客:http://blog.csdn.net/yczz/article/details/38761237

在实现下载工具系统的过程中主要涉及两部分的Java流操作,一个是从打开的URL连接中获得网络的输入流,一个是想文件写入内容的输出流。

实现所需关键技术

标签:

原文地址:http://www.cnblogs.com/najiadian/p/5341411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!