操作更高级的线程任务

 中断线程

Thread类提供了一种线程可以中断其他线程的机制。当一个线程被中断时,它会抛出java.lang.InterruptedException。

 void interrupt(): 

              中断调用此方法的Thread对象所关联的线程。

   --------->  当一条线程由于调用了Thread的sleep()或者join()方法而被阻塞时,该线程的中断状态就会被清除,同时抛出InterruptedException异常。

static boolean interrupted()

                         验证当前线程是否已经中断,在这个例子会返回true。该线程的中断状态会被这个方法清除掉。

        boolean  isInterrupted();

                           验证线程是否已经中断,该线程的中断状态不会受此方法的影响。

​
package demo;

public class ThreadDemo {

	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:-->" + name + "  count:-->"
							+ count++);
				}

			}

		};

		Thread t1 = new Thread(r);

		Thread t2 = new Thread(r);

		t1.start();
		t2.start();

		while (true) {
			double n = Math.random();
			if (n >= 0.4999999 && n < 0.50000001) {
				break;
			}
		}

		t1.interrupt();
		t2.interrupt();
	}
}

​

   等待线程

线程(如默认的主线程)会偶尔启动另一个线程去操作单调的计算,下载大文件或者操作一些其他的耗时任务。在结束它自己的任务后,这个启动工作线程的线程就准备着处理工作线程的结果,同时等待该线程“寿终正寝”。

Thread类 提供了3中join()方法,允许调用线程等待执行此方法的线程对象所关联的线程执行完毕。

void join()

     无限期地等待直到该线程死亡。当任意线程中断当前线程,InterruptedException就会抛出。

void join(long millis)

      该线程死亡之前最多等待millis毫秒。如果传递0作为参数就会无限期地等待。

void join(long millis, int nanos)

线程睡眠

Thread类声明了一对静态方法致使线程睡眠。(暂时性 的停止执行)

        void sleep(long millis)

                  线程沉睡多少毫秒

            

package demo;

public class ThreadDemo {

	public static void main(String[] args) {
		Runnable r = new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				String name = Thread.currentThread().getName();

				int count = 0;

				while (!Thread.interrupted()) {
					System.out.println("name:-->" + name + "  count:-->"
							+ count++);
				}

			}
		};
		Thread t1 = new Thread(r);

		Thread t2 = new Thread(r);

		t1.start();
		t2.start();

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		t1.interrupt();
		t2.interrupt();
	}

}

            

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值