Java基本功之中断线程的理解

上传人:zhu****ng 文档编号:103129244 上传时间:2022-06-08 格式:DOC 页数:6 大小:19.01KB
收藏 版权申诉 举报 下载
Java基本功之中断线程的理解_第1页
第1页 / 共6页
Java基本功之中断线程的理解_第2页
第2页 / 共6页
Java基本功之中断线程的理解_第3页
第3页 / 共6页
资源描述:

《Java基本功之中断线程的理解》由会员分享,可在线阅读,更多相关《Java基本功之中断线程的理解(6页珍藏版)》请在装配图网上搜索。

1、Java基本功之中断线程的理解有的时候我们需要一种规范的思路,使用规范的方法来解决一类问题。我们首先要明白,线程终止的条件,有三种情况:1.当线程的run方法执行方法体中最后一条语句后。2.当执行retutrn语句返回时。3.当出现了在方法中没有捕获的异常时。在Java的早期版本中,还有一个stop方法,其他线程可以调用它终止线程,但是这个方法已经被弃用了,所以还在用的同学就不要继续用了。我们的正确思路是,使用interrupt方法来终止我们的线程。首先要理解interrupt方法做了什么:每一个线程都有一个中断状态,这是一个boolean标志,当线程调用了interrupt方法时,这个中断状

2、态就会被置位。如果我们要检查中断状态,可以使用Thread.currentThread()。isInterrupted()来获得是否中断。但是如果线程被阻塞了(sleep or wait),当我们调用了interrupt方法的时候,就会产生InterruptedException异常。这是我们可以利用的地方。同样的,如果中断状态先被置位了,然后我们调用了sleep方法,线程不会休眠,相反,它将清除中断状态,然后抛出InterruptedException.我们调用了interrupt并不意味着线程会终止,线程是否会终止,以及会如何继续,是程序员来控制的。在本文中我们将会讨论终止线程的规范用法,

3、然后在一个例子中实际应用,在这个例子中我们模拟了文件拷贝和游戏绘图两种情形。做出的效果如下图所示,点击start后上方进度条会显示文件拷贝的进度,点击end则会停止拷贝。点击draw会在画面中不停绘制各种各样的矩形,点击stop则会停止绘制。首先我们来看两种情形的后台线程写法:public void run() trywhile(!Thread.currentThread.isInterrupted() & more work to do)do more workcatch(InterruptedException)/thread was interrupted during sleep or

4、 waitfinallycleanup, if required/exiting the run method terminates the thread public void run() trywhile( more work to do)do more workThread.sleep(delay);catch(InterruptedException)/thread was interrupted during sleep or waitfinallycleanup, if required/exiting the run method terminates the thread 第一

5、种写法适用于后台下载,文件拷贝以及类似情形,第二种写法适合游戏画面刷新或者类似情形。第一种写法利用了interrupt方法,作为终止的请求,使得循环跳出,run方法执行完毕。而第二种方法则是利用当线程sleep的时候调用interrupt会抛出InterruptedException从而跳出了循环进而线程执行到结束。事实上这两种写法的区别就在于第二种使用了sleep.在我们的使用示例中,对应这两种方法的使用代码如下:这一段是实现文件拷贝的:private class CopyRunnable implements Runnable Overridepublic void run() File

6、fromFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + /abc.exe);long fileLength = fromFile.length();long copyedLength = 0;File toFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + /abc_.exe);if (toFile.exists() toFile.delete();try FileInputStrea

7、m fileInputStream = new FileInputStream(fromFile);FileOutputStream fileOutputStream = new FileOutputStream(toFile, true);byte buffer = new byte2048;int readLength = 0;while (!Thread.currentThread()。isInterrupted()& (readLength = fileInputStream.read(buffer) != -1) fileOutputStream.write(buffer, 0, b

8、uffer.length);copyedLength += readLength;int progress = (int)(float) copyedLength / fileLength * 100);handler.obtainMessage(0, progress, 0)。sendToTarget(); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally handler.obtainMessage(1)。sendToTarget();

9、这一段是实现矩形绘图的:private class DrawRunnable implements Runnable Overridepublic void run() try while (true) long beginTime = System.currentTimeMillis();paint.setColor(getColor();getCoor();postInvalidate();long endTime = System.currentTimeMillis();if (endTime - beginTime 150) Thread.sleep(150 - (endTime -

10、beginTime); catch (InterruptedException e) e.printStackTrace(); finally 实际上这两种写法都是利用了interrupt方法的特点,通过线程的中断置位或者异常抛出来跳出循环进而终结线程。如果对这段代码感兴趣,可以到文章最后下载代码。最后做一下方法总结:void interrupt()向线程发送中断请求。线程的中断状态将被设置为true.如果目前该线程被一个sleep调用阻塞,那么,InterruptedException异常被抛出。static boolean interrupted()测试当前线程(即正在执行这一命令的线程)是否被中断,注意,这是一个静态方法。这一调用会产生副作用,它将当前线程的中断状态设置为false.boolean isInterrupted()测试线程是否被中断。不像静态的中断方法,这一调用不会改变线程的中断状态。static Thread currentThread()返回代表当前执行线程的Thread对象。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!