Java并发学习之三——线程的中断

本文是学习网络上的文章时的总结,感谢大家无私的分享。

1、一个多个线程在执行的Java程序,只有当其全部的线程执行结束时(更具体的说,是所有非守护线程结束或者某个线程调用System.exit()方法的时候),它才会结束运行。有时,你需要为了终止程序而结束一个线程,或者当程序的用户想要取消某个Thread对象正在做的任务。

2Java提供中断机制来通知线程表明我们想要结束它。中断机制的特性是线程需要检查是否被中断,而且还可以决定是否相应结束的请求。所以,线程可以忽略中断请求并且继续运行。

3Thread类还有其他的可以检查线程是否被中断的方法。例如,静态方法interrupted()能检查正在运行的线程是否被中断。isInterrupted()interrupted()方法有着很重要的区别。第一个不会改变interrupted属性值,但是第二个会设置成falseInterrupted()方法是一个静态方法,建议使用isInterrupted()方法。

下面是代码实现

package chapter;
/**
 * 
 * <p>
 * Description: 线程的中断
 * </p>
 * @author zhangjunshuai
 * @version 1.0
 * Create Date: 2014-8-11 上午11:09:55
 * Project Name: Java7Thread
 *
 * <pre>
 * Modification History: 
  *             Date                                Author                   Version          Description 
 * -----------------------------------------------------------------------------------------------------------  
 * LastChange: $Date::             $      $Author: $          $Rev: $         
 * </pre>
 *
 */
public class PrimeGenerator extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		long number = 1L;
		while(true){
			if(isPrime(number)){
				System.out.printf("Number %d is Prime\n",number);
			}
			if(isInterrupted()){
				System.out.printf("The Prime Generator has been Interrupted");
				return;
			}
			number++;
		}
	}
	/**
	 * <p>
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-8-11 下午2:48:31
	 * @param number
	 * @return
	 */
	private boolean isPrime(long number){
		if(number <=2){
			return true;
		}
		
		for(long i=2; i<number;i++){
			if((number%i)==0){
				return false;
			}
		}
		return true;
	}

}

主程序调用

package chapter;

public class Main3 {

	/**
	 * <p>
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-8-11 上午11:20:15
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread task = new PrimeGenerator();
		task.start();
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		task.interrupt();
	}

}

实验结果


参考:

并发编程网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值