如何停止一个进程

https://cloud.tencent.com/developer/article/1451817

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
  2. 使用interrupt方法中断线程。
  3. 不推荐使用 stop、suspend及resume 方法。相当于电脑断电关机一样,是不安全的方法。

使用退出标志

线程当中一般都会写循环,如果不写循环,一句话能搞定的事,就没必要再开线程来处理。 stop方法已经过时, run方法结束。 开启多线程时,运行代码通常是循环结构,只要控制住循环,就可以让run方法结束,也就是线程结束。 原理:只要循环终止了,线程也就终止了。

public class StopThread implements Runnable{
    private volatile boolean flag = true;
    @Override
    public void run() {
        while (flag) {
                System.out.println(Thread.currentThread().getName() + "...run");
        }
        System.out.println("...stop");
    }

    public void set() {
        flag = false;
    }
}

使用了一个关键字 volatile,保证当前 flag 在多核CPU 下的可见性。

package com.liukai.thread.stop;

public class MyThread extends Thread {
    public void run(){
        super.run();

        try {
            for(int i=0; i<5000; i++){
                if (i == 100) {
                    System.out.println("主动中断线程");
                    Thread.currentThread().interrupt();
                }
                System.out.println("i="+(i+1));
                Thread.sleep(100);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/JMrLi/p/11593571.html

时间: 2024-07-31 10:04:41

如何停止一个进程的相关文章

[windows bat]如何停止一个进程

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 描述:使用该工具按照进程 ID (PID) 或映像名称终止任务. 参数列表: 1. /S system 指定要连接的远程系统. 2. /U [domain\]user 指定应该在哪个用户上下文执行这个命令. 3. /P [password] 为提供的用户上下文指定密码.如果忽略

Java并发(基础知识)—— 创建、运行以及停止一个线程

0.介绍 在计算机世界,当人们谈到并发时,它的意思是一系列的任务在计算机中同时执行.如果计算机有多个处理器或者多核处理器,那么这个同时性是真实发生的:如果计算机只有一个核心处理器那么就只是表面现象. 现代所有的操作系统都允许并发地执行任务.你可以在听音乐和浏览网页新闻的同时阅读邮件,我们说这种并发是进程级别的并发.而且在同一进程内,也会同时有多种任务,这些在同一进程内运行的并发任务称之为线程. 在这里我们要讨论的是线程级并发.Java提供了Thread类,使我们能够在一个Java进程中运行多个线

ORACLE如何停止一个JOB

ORACLE如何停止一个JOB1 相关表.视图2 问题描述为同事解决一个因为网络连接情况不佳时,执行一个超长时间的SQL插入操作.既然网络状况不好,就选择了使用一次性使用JOB来完成该插入操作.在JOB执行一段时间后,我发现被插入表有些问题(惭愧,当时也没有先检查检查就做了).准备停止JOB,因为在JOB运行情况下,我的所有修改都会报系统资源忙的错误.强行KILL SESSION是行不通的,因为过会儿,JOB还会重新启动,如果执行的SQL也被KILL了通过重新启动的JOB还是会被再次新执行的.3

一个进程间同步和通讯的 C# 框架

转自原文 一个进程间同步和通讯的 C# 框架 threadmsg_demo.zip ~ 41KB    下载 threadmsg_src.zip ~ 65KB    下载 0.背景简介 微软在 .NET 框架中提供了多种实用的线程同步手段,其中包括 monitor 类及 reader-writer锁.但跨进程的同步方法还是非常欠缺.另外,目前也没有方便的线程间及进程间传递消息的方法.例如C/S和SOA,又或者生产者/消费者模式中就常常需要传递消息.为此我编写了一个独立完整的框架,实现了跨线程和跨

Supervisor是一个进程监控程序(转)

满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor 先弄懂两个命令: supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令 supervisorctl:启动supervisor的命令行窗口. 需求:redis-server这个进程是运行redis的服务.我们要求这个服务能在意外停止后自动重启. 安装(Centos):

inno setup 安装前判断进程是否存在,以及停止相应进程&lt;转&gt;

打包的时候遇到了这样的需求:假似用户都是傻瓜                  式操作,如果更新安装程序的时候,之前的老程序还在运行这个时候如果你去提示让用户吧老程序手动退掉也不现实. 所以当遇到这种情况的时候能不能在更新安装程序上下手,在更新的时候就默认吧老程序杀掉(如果老程序在运行). 答案是明确的inno setup 是可以这样的操作. 下面是转的文章,谢谢作者的分享. ============================================================

windows 启动停止 java进程

本案例以 xxx.jar    为列子 我们一般启动的jar 在任务管理器中查看进程都是javaw.exe ,无法用命令来 kill,所以我们得给自己的java 进程设置个新 title 1:  首先将C:\Program Files\Java\jdk1.8.0_45\bin目录下的javaw.exe文件复制一份重命名为你需要运行的jar的标签.exe  如“balabala.exe” 然后将其放回C:\Program Files\Java\jdk1.8.0_45\bin 下. 2..写个启动脚

实现同一个脚本多次运行,系统中只有一个进程

编写脚本,实现同一个脚本多次运行,系统中只有一个进程 [email protected] scripts]#cat pid.sh #!/bin/sh pidpath=/tmp/a.pid if [ -f "$pidpath" ]   then     kill `cat $pidpath` >/dev/null 2>&1     rm -f $pidpath fi echo $$ >$pidpath sleep 300 测试如下 [email protecte

ZeroMQ接口函数之 :zmq_ctx_shutdown - 停止一个ZMQ context

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_shutdown zmq_ctx_shutdown(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_ctx_shutdown - 停止一个ZMQ context Synopsis int zmq_ctx_shutdown (void *context); Description zmq_ctx_shutdown() 函数会停止ZMQ 环境上下文context. 停止context会