/**

* @FileName: ThreadTest.java

* @Description:

* @Author : xingchong

* @CreateTime: Sep 22, 2018 12:01:01 PM

* @Copyright: 超火影游 Copyright (c) 2017

* @Version: 1.0

*/

public class ThreadTest implements Runnable {

private boolean stop = false;

private Thread thread;

private int flag;

public ThreadTest(){

this.thread = new Thread(this, ThreadTest.class.getSimpleName());

this.flag = 0;

}

private String getName(){

return "["+Thread.currentThread().getName()+"] ";

}

/*

* (non-Javadoc)

*

* @see java.lang.Runnable#run()

*/

@Override

public void run() {

while(!stop){

System.out.println(this.getName() +", i am running..."+ this.flag++);

if(this.flag > 30){

break;

}

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.println(this.getName()+", i am end...");

}

public synchronized void start(){

this.thread.start();

}

public synchronized void stop(){

System.out.println(this.getName() +", stop the thread...");

this.stop = true;

this.thread.interrupt();//马上中断 thread 正在进行的 sleep 等操作,而让停止操作立即执行

//若没有上面interrupt()方法,会导致 thread 发呆在 sleep ,担耽时机

try {

this.thread.join();//为了现在马上转入 thread 线程,以触发this.stop引起的停止操作,而不用再让main线程抢 CPU,担耽时机

} catch (InterruptedException e) {

e.printStackTrace();

}

//若没有上面的 join()方法,会导致以下代码在停止前执行

for (int i = 0; i < 3; i++) {

System.out.println(this.getName() +"in stop ...");

}

}

public static void main(String[] args) {

ThreadTest threadTest = new ThreadTest();

threadTest.start();

for (int i = 0; i < 3; i++) {

System.out.println(threadTest.getName()+", main...." + i);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

threadTest.stop();

System.out.println(threadTest.getName()+", main is end...");

}

}

关于java 线程的停止同时用 interrupt 和 join 的作用的更多相关文章

  1. java线程之停止线程

         在Java中有以下3种方法可以终止一个正在运行的线程:      1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止.      2.使用stop方法强制终止线程,但不推荐使用 ...

  2. Java线程池停止空闲线程是否有规则呢?

    Java线程池中线程的数量超过核心线程的数量,且所有线程空闲,空闲时间超过keepAliveTime,会停止超过核心线程数量的线程,那么会保留哪些线程呢?是不是有规则呢? 测试代码: ThreadPo ...

  3. Java线程状态及 wait、sleep、join、interrupt、yield等的区别

    Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到  被中断.被拥有该对象锁的线程唤醒(notify或not ...

  4. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...

  5. 【java线程】的wait、sleep、join、yied

    1.概述 使用Thread相对来说比较简单,没有什么成本,但是通常来说,我们使用线程基本就是覆写run方法,然后调用线程对象的start函数启动线程. 对于面试人员来说,这些都不是面试官会问到的问题, ...

  6. java 线程Thread.Sleep详解 Thread.Sleep(0)的作用(转载)

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...

  7. 如何终止java线程

    http://blog.csdn.net/anhuidelinger/article/details/11746365 终止线程的三种方法 有三种方法可以使终止线程. 1.  使用退出标志,使线程正常 ...

  8. 初识java线程(Thread)

    <1>.概念问题 线程的状态:1.NEW : 没有start的线程 2.RUNNING :可运行线程,可能正在执行,也可能正在等待操作系统中的其他资源,比如cpu时间片 3.BlOCKED ...

  9. Java线程(1)

    多线程快速入门 线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以 ...

随机推荐

  1. NSDateFormatter 今年日期格式化成字符串是明年日期问题?

    在项目里我要是把NSDate格式化成字符串 我的format是@"YYYY年MM月dd日 HH:mm" 传入日期2013-12-30 15:00:00后,返回给我的字符串是 201 ...

  2. 使用Devstack部署neutron网络节点

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  3. 剑指offer——34之字打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   题解: 与上道题没区别,就是在存入数据时 ...

  4. 如何用javascript高效的判断浏览器种类和版本

    <script type="text/javascript">        var Sys = {};        var ua = navigator.userA ...

  5. 使Excel中单元格内英文为Arial Narrow 中文为宋体显示打印

    因为在对数据表进行排版格式整理的时候,发现Arial Narrow字体是不支持中文的,所以中文默认为宋体,但是显示出来却不是宋体,需要双击单元格中文才显示为宋体,这样打印出来才为宋体 但是如果有很多单 ...

  6. 【POJ】1860 Currency Exchange

    真是气skr人..没把d[]换成double...de了一上午的bug// 记得用G++提交啊 题目链接:http://poj.org/problem?id=1860 题意:告诉你n个点,m条路.起始 ...

  7. flutter 底部bottomNavigationBar凸起效果

    概要 最近在做flutter 的时候,之前看到想实现 底部导航栏中间按钮 凸起效果, 最近想做又突然找不到方案了,因此记录下这里的实现方式. 预览效果 代码 主要使用 BottomAppBar 组建, ...

  8. Python学习笔记(一)——输入与输出

    输出:——print() Python中的输出使用print()完成 >>> 在屏幕中输出Hello World >>> print('Hello World') ...

  9. python3正则表达式指南

    1.正则表达式基础 1.1 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强 ...

  10. 数论剩余系——cf1089F

    关于模和互质,很好的题目 /* n两个质因子 x,y有 ax+by=n-1 ax+by=n-1 ax+1+by=n y|ax+1 gcd(x,y)=1 ax%y,a取[1,y-1],就会有[1,y-1 ...