1.2执行更高级的线程任务(Performing More Advanced Thread Tasks)

在前面的线程任务都连接着一个设定的Thread对象,和开启连接着thread。然而,这个Thread也提供着更多高级的任务,包括打断其它线程的执行、合并一个线程到另一个线程,和导致一个线程去休眠。

1.2.1打断线程(Interruption Threads) 

这个Thread提供给每一个线程可以打断另一个线程的打断机制。当一个线程被打断,它将会抛出java.lang.InterruptedException的异常。这个机制包含了下面三个的方法:

       (1) void interrupt():通过Thread的这个方法来打断一个线程。当一个线程因为请求Thread的sleep()或join()的方法而阻塞时,这个线程被打断将会抛出         InterruptedException。

       (2) static boolean interrupted():测试当前的线程是否被打断,如果是将会返回true。线程是否被打断,通过这个方法是可以明确的。

       (3) boolean isInterrupted():测试这个线程是否已经被打断,如果是将会返回true。这个线程的打断状态在这个方法是不被影响的。

我创建一个应用,这个应用是证明线程被打断的。看Listing1-2.

Listing1-2 证明线程打断。

package com.owen.thread.chapter1;

public class ThreadInterruption
{
	public static void main(String[] args)
	{
		Runnable r = new Runnable()
		{
			@Override
			public void run()
			{
				String name = Thread.currentThread().getName();
				int count = 0;
				while (!Thread.interrupted())
					System.out.println(name + ": " + count++);
			}
		};
		Thread thdA = new Thread(r);
		Thread thdB = new Thread(r);
		thdA.start();
		thdB.start();
		while (true)
		{
			double n = Math.random();
			if (n >= 0.49999999 && n <= 0.50000001)
				break;
		}
		thdA.interrupt();
		thdB.interrupt();
	}
}

在主线程中第一次创建一个Runnable的线程,包含了当前线程和名字。这个Runnbale声明了一个计数器,和将其放入到while的循环体内,然后不断地打印出一个线程的名字和计数器的值,在线程没有被打断前这个计数器是在不断地增加。

     接下来是创建一对Thread的对象,这个线程是执行这个Runnable和开启后台的线程。

     为了在打断线程之前,给后台的线程打印出几条信息,我们在主线程加入了一个while的循环语句,为个循环的设计为了消耗点时间。这个循环是在重复包含着一个随机数,直到个数是在我们规定的范围内。

       Note 一个循环产生随机数的设计不是很好和想法,它会浪费处理器的周期。

主线程的循环结束后,主线程就会在每一个后台的线程Thread对象执行infterrupt()方法。接下来就是后台线程执行Thread.interrupted(),这个方法将会返回一个true,后台线程也就会结束。

执行上面的代码,你可能会看到如下的结果。

Thread-1: 67
Thread-1: 68
Thread-0: 768
Thread-1: 69
Thread-0: 769
Thread-0: 770
Thread-1: 70
Thread-0: 771
Thread-0: 772
Thread-1: 71
Thread-0: 773
Thread-1: 72
Thread-0: 774
Thread-1: 73
Thread-0: 775
Thread-0: 776
Thread-0: 777
Thread-0: 778
Thread-1: 74
Thread-0: 779
Thread-1: 75

  源码下载:git@github.com:owenwilliam/Thread.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值