从头认识多线程-1.9 迫使线程停止的方法-return法

这一章节我们来讨论一下还有一种停止线程的方法-return

1.在主线程上面return,是把全部在执行的线程都停掉

package com.ray.deepintothread.ch01.topic_9;

public class StopByReturn {
	public static void main(String[] args) throws InterruptedException {
		ThreadFive threadFive = new ThreadFive();
		Thread thread1 = new Thread(threadFive);
		thread1.start();
		Thread thread2 = new Thread(threadFive);
		thread2.start();
		Thread.sleep(200);
		return;
	}
}

class ThreadFive implements Runnable {

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + " begin");
		try {
			System.out.println(Thread.currentThread().getName() + " working");
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			System.out.println(Thread.currentThread().getName() + " exit");
		}
	}
}

输出:

Thread-1 begin
Thread-1 working
Thread-0 begin
Thread-0 working


2.在当前线程return,仅仅是单纯的停止当前线程

package com.ray.deepintothread.ch01.topic_9;

public class StopByReturn2 {
	public static void main(String[] args) throws InterruptedException {
		ThreadOne threadOne = new ThreadOne();
		threadOne.start();
		Thread.sleep(200);
		threadOne.interrupt();
	}
}

class ThreadOne extends Thread {

	@Override
	public void run() {
		while (true) {
			if (this.isInterrupted()) {
				System.out.println("return");
				return;
			}
		}
	}
}

输出:

return


package com.ray.deepintothread.ch01.topic_9;

import java.util.ArrayList;

public class StopByReturn3 {
	public static void main(String[] args) throws InterruptedException {
		ThreadOne threadTwo = new ThreadOne();
		ArrayList<Thread> list = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			Thread thread = new Thread(threadTwo);
			thread.start();
			list.add(thread);
		}
		Thread.sleep(20);
		list.get(0).interrupt();
	}
}

class ThreadTwo implements Runnable {

	@Override
	public void run() {
		while (true) {
			if (Thread.currentThread().isInterrupted()) {
				System.out.println("Thread name:" + Thread.currentThread().getName() + " return");
				return;
			}
		}
	}
}

输出:

Thread name:Thread-0 return

(然后其它线程一直在执行)


总结:这一章节我们讨论了一下return的两个方面,大家须要特别注意一点的就是return在main里面的运用。


我的github:https://github.com/raylee2015/DeepIntoThread



posted @ 2017-08-06 21:21  yxysuanfa  阅读(623)  评论(0编辑  收藏  举报