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

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

  1. package com.ray.deepintothread.ch01.topic_9;
  2.  
  3. public class StopByReturn {
  4. public static void main(String[] args) throws InterruptedException {
  5. ThreadFive threadFive = new ThreadFive();
  6. Thread thread1 = new Thread(threadFive);
  7. thread1.start();
  8. Thread thread2 = new Thread(threadFive);
  9. thread2.start();
  10. Thread.sleep(200);
  11. return;
  12. }
  13. }
  14.  
  15. class ThreadFive implements Runnable {
  16.  
  17. @Override
  18. public void run() {
  19. System.out.println(Thread.currentThread().getName() + " begin");
  20. try {
  21. System.out.println(Thread.currentThread().getName() + " working");
  22. Thread.sleep(2000);
  23. } catch (InterruptedException e) {
  24. System.out.println(Thread.currentThread().getName() + " exit");
  25. }
  26. }
  27. }

输出:

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

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

  1. package com.ray.deepintothread.ch01.topic_9;
  2.  
  3. public class StopByReturn2 {
  4. public static void main(String[] args) throws InterruptedException {
  5. ThreadOne threadOne = new ThreadOne();
  6. threadOne.start();
  7. Thread.sleep(200);
  8. threadOne.interrupt();
  9. }
  10. }
  11.  
  12. class ThreadOne extends Thread {
  13.  
  14. @Override
  15. public void run() {
  16. while (true) {
  17. if (this.isInterrupted()) {
  18. System.out.println("return");
  19. return;
  20. }
  21. }
  22. }
  23. }

输出:

return

  1. package com.ray.deepintothread.ch01.topic_9;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public class StopByReturn3 {
  6. public static void main(String[] args) throws InterruptedException {
  7. ThreadOne threadTwo = new ThreadOne();
  8. ArrayList<Thread> list = new ArrayList<>();
  9. for (int i = 0; i < 3; i++) {
  10. Thread thread = new Thread(threadTwo);
  11. thread.start();
  12. list.add(thread);
  13. }
  14. Thread.sleep(20);
  15. list.get(0).interrupt();
  16. }
  17. }
  18.  
  19. class ThreadTwo implements Runnable {
  20.  
  21. @Override
  22. public void run() {
  23. while (true) {
  24. if (Thread.currentThread().isInterrupted()) {
  25. System.out.println("Thread name:" + Thread.currentThread().getName() + " return");
  26. return;
  27. }
  28. }
  29. }
  30. }

输出:

Thread name:Thread-0 return

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

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

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

从头认识多线程-1.9 迫使线程停止的方法-return法的更多相关文章

  1. 从头认识多线程-1.8 迫使线程停止的方法-暴力Stop方法

    这一章节我们来讨论一下暴力Stop方法. 1.使用样例 package com.ray.deepintothread.ch01.topic_8; public class StopByStopMeth ...

  2. 零基础学习java------day18------properties集合,多线程(线程和进程,多线程的实现,线程中的方法,线程的声明周期,线程安全问题,wait/notify.notifyAll,死锁,线程池),

    1.Properties集合 1.1 概述: Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 一个属性列表可包含另 ...

  3. Thread的中断机制(interrupt),循环线程停止的方法

    一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...

  4. Java多线程系列三——实现线程同步的方法

    两种实现线程同步的方法 方法 特性 synchronized 不需要显式地加解锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁 ...

  5. Java线程停止interrupt()方法

    程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中 ...

  6. java多线线程停止正确方法

    //军队线程 //模拟作战双方的行为 public class ArmyRunnable implements Runnable { //volatile保证了线程可以正确的读取其他线程写入的值 // ...

  7. 多线程---其他方法 停止线程、守护线程、join方法

    第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到 ...

  8. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.        假设一个服务器完成一项任务所需时间为:T1 创 ...

  9. C#多线程实践——锁和线程安全

    锁实现互斥的访问,用于确保在同一时刻只有一个线程可以进入特殊的代码片段,考虑下面的类: class ThreadUnsafe { static int val1, val2; static void ...

随机推荐

  1. 快速幂 cojs 1130. 取余运算

    cojs 1130. 取余运算 ★   输入文件:dmod.in   输出文件:dmod.out   简单对比时间限制:10 s   内存限制:128 MB [题目描述] 输入b,p,k的值,求b^p ...

  2. 内功心法 -- java.util.LinkedList<E> (7)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  3. <摘录>Gson对Java嵌套对象和JSON字符串之间的转换

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

  4. mac os颜色拾取工具/软件/器推荐

    软件名:ColorSnappe 目前我用的时1.1.0版本 该工具可以利用alt+command+c快捷键拾取颜色,拾取后可以自动把颜色代码放入剪切板 .我最喜欢它可以生成ios开发的代码,比如选择了 ...

  5. Spring @PostConstruct和@PreDestroy实例

    在Spring中,既可以实现InitializingBean和DisposableBean接口或在bean配置文件中指定 init-method 和 destroy-method 在初始化和销毁回调函 ...

  6. mysql item类

    http://dev.mysql.com/doc/internals/en/item-class.html http://ourmysql.com/archives/1282

  7. Android BottomNavigationBar底部导航控制器的使用

    最近Google在自己推出的Material design中增加了Bottom Navigation导航控制.Android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,就类似苹 ...

  8. TurboLinux11system»adjtimex简介

    Adjtimex介绍 linux 系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...

  9. 第十一章 PhpMyAdmin连接远程mysql服务器---连接openwrt 703N服务器

    //千万不要在你原来的那个phpmyadmin文件夹上操作~~~要复制一个新的进行操作,这样我们就可以同时使用本地和远程   一.下载phpmyadmin到本地 我使用的是windows下的集成WAM ...

  10. error: <class 'xml.parsers.expat.ExpatError'>, syntax error: line 1, column 0: file: /usr/local/lib/python2.7/xmlrpclib.py line: 557

    当linux设备上开启sonar6.2时, supervisorctl status报如下错误: error: <class 'xml.parsers.expat.ExpatError'> ...