这一章节我们来讨论一下还有一种停止线程的方法-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

从头认识多线程-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. Java(静态)变量和(静态)代码块的执行顺序

    本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: 1.Foo类,用于打印变量 public class Foo { public Foo(String word) { Sys ...

  2. Linux6.9用RPM方式安装MySQL5.7.21

    1.下载安装包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-1.el6.x86_64.rpm-bundle.tar ...

  3. IPtables/NetFilter

    前提知识 任何主机若要与非同网络中的主机通信,则必须将报文发送到默认网关: 对Linux而言,IP地址是属于主机(内核中)的,不属于网卡,只要属于当前主机的IP地址间,都可直接响应,不称为转发 私有地 ...

  4. Ext NumberField使用

    Ext.onReady(function(){ Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget="side"; v ...

  5. nginx出现504 Gateway Time-out的解决思路

    http://www.xbc.me/nginx-fix-504-gateway-timeout/ 在安装完Nginx+PHP-fpm+Mysql后 (如何安装LNMP环境,请参考快速配置LNMP环境N ...

  6. 关于jQuery中的 offset() 和 position() 的用法

    ---恢复内容开始--- 在jQuery中有两个获取元素位置的方法offset()和position().position()方法是在1.2.6版本之后加入的,为什么要引入这个方法呢?这两个方法之间有 ...

  7. MySql清空表的方法介绍 : truncate table 表名

    清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...

  8. Effective C++:条款29:为“异常安全”而努力是值得的

    (一)先看以下这些代码: class PrettyMenu { public: void changeBackground(istream& imgSrc); private: Mutex m ...

  9. RxJava Subject

    Subject Subject可以看成是一个桥梁或者代理,在某些ReactiveX实现中(如RxJava),它同时充当了Observer和Observable的角色.因为它是一个Observer,它可 ...

  10. Computer Vision Tutorials from Conferences (3) -- CVPR

    CVPR 2013 (http://www.pamitc.org/cvpr13/tutorials.php) Foundations of Spatial SpectroscopyJames Cogg ...