Java並發學習之四——操作線程的中斷機制

來源:互聯網
上載者:User

標籤:中斷機制

本文是學習網路上的文章時的總結,感謝大家無私的分享。

1、如果線程實現的是由複雜演算法分成的一些方法,或者他的方法有遞迴調用,那麼我們可以用更好的機制來控制線程中斷。為了這個Java提供了InterruptedException異常。當你檢測到程式的中斷並在run()方法內捕獲,你可以拋這個異常。

2、InterruptedException異常是由一些與並發API相關的Java方法,如sleep()拋出的。

下面以程式解釋

package chapter;import java.io.File;/** * <p> * Description:我們將實現的線程會根據給定的名稱在檔案件和子檔案夾裡尋找檔案,這個將展示如何使用InterruptedException異常來控制線程的中斷。 * </p> *  * @author zhangjunshuai * @version 1.0 Create Date: 2014-8-11 下午3:10:29 Project Name: Java7Thread *  *          <pre> * Modification History:  *             Date                                Author                   Version          Description  * -----------------------------------------------------------------------------------------------------------   * LastChange: $Date::             $      $Author: $          $Rev: $ * </pre> *  */public class FileSearch implements Runnable {private String initPath;private String fileName;public FileSearch(String initPath, String fileName) {this.fileName = fileName;this.initPath = initPath;}@Overridepublic void run() {File file = new File(initPath);if (file.isDirectory()) {try {directoryProcess(file);} catch (InterruptedException e) {System.out.printf("%s:The search has been interrupted", Thread.currentThread().getName());}}}private void directoryProcess(File file) throws InterruptedException {File list[] = file.listFiles();if (list != null) {for (int i = 0; i < list.length; i++) {if (list[i].isDirectory()) {directoryProcess(list[i]);} else {fileProcess(list[i]);}}}if (Thread.interrupted()) {throw new InterruptedException();}}private void fileProcess(File file) throws InterruptedException {if (file.getName().equals(fileName)) {System.out.printf("%s : %s\n", Thread.currentThread().getName(),file.getAbsolutePath());}if(Thread.interrupted()){throw new InterruptedException();}}}
package chapter;import java.util.concurrent.TimeUnit;public class Main4 {/** * <p> * </p> * @author zhangjunshuai * @date 2014-8-12 下午3:40:54 * @param args */public static void main(String[] args) {FileSearch searcher = new FileSearch("c:\\", "unintall.log");Thread thread = new Thread(searcher);thread.start();try {TimeUnit.SECONDS.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}thread.interrupt();}}

請注意程式中使用的是Thread.interrupted(),此方法和 isInterrupted()是有區別的。

另:JDK的TimeUnit是學習枚舉的好例子

參考:

並發編程網

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.