线程的启动和停止

import java.lang.Thread;
import java.lang.Runnable;
import java.util.Date;

public class DefineAndStartThread{
class ThreadA extends Thread{
private Date runDate;
//继承Thread的子类必须实现run方法,Thread中的run方法未做任何事
public void run(){
System.out.println("ThreadA begin");
this.runDate = new Date();
System.out.println("ThreadA run: "+this.runDate);
System.out.println("ThreadA end");
}
}

class ThreadB implements Runnable{
private Date runDate;
public void run(){
System.out.println("ThreadB begin");
this.runDate = new Date();
System.out.println("ThreadB run: "+this.runDate);
System.out.println("ThreadB end");
}
}

public void startThreadA(){
//这里是面向对象的多态特征,子类对象可以直接赋给父类变量,但运行时依然表现为子类特性
//声明变量类型为父类,实际变量类型为子类对象
Thread threadA = new ThreadA();
//启用线程后,jvm会调用该线程的run方法,执行线程
threadA.start();
}

public void startThreadB(){
Runnable rb = new ThreadB();
Thread threadB = new Thread(rb);
//启用线程后,会引起调用该线程的run方法,执行线程
threadB.start();
}

public static void main(String[] args){
DefineAndStartThread test = new DefineAndStartThread();
test.startThreadA();
test.startThreadB();
}
}

import java.lang.Thread;
import java.util.Date;

public class StopThread{
    //因为该类的start、stop、main方法都要用到ThreadA的实例对象,所以声明为类变量
    private ThreadA thread = new ThreadA();
    class ThreadA extends Thread{
        //用来对外设置是否执行run方法的标识
        private boolean running = false;
        private Date runDate;
        //重写Thread父类的start方法,在父类start方法之上设置运行标识为true
        public void start(){
            this.running = true;
            super.start();
            }
        //线程一旦启动则不停的循环执行,直到执行标识为false,则停止运行
        public void run(){
            System.out.println("ThreadA begin");
            try{
                int i=0;
                while(this.running){
                this.runDate = new Date();
//                System.out.println("ThreadA run: "+this.runDate);
                System.out.println("ThreadA run: "+ i++);
                Thread.sleep(200);
                }
            }catch(InterruptedException e){
                e.printStackTrace();
                }
            System.out.println("ThreadA end");
            }

        public void setRunning(boolean running){
            this.running = running;
            }
        }

        public void start(){
            this.thread.start();
            }

        //修改执行标识为false则停止执行run方法
        public void stop(){
            this.thread.setRunning(false);
            }
        public static void main(String[] args){
            StopThread stopThread = new StopThread();
            //线程一直运行直到结果结束
            stopThread.start();
            //当前线程休眠1秒
            try{
                Thread.sleep(1000);
            }catch(InterruptedException e){
                e.printStackTrace();
                }
            stopThread.stop();
            }

    }

原文地址:https://www.cnblogs.com/celine/p/9460536.html

时间: 2024-11-04 20:50:23

线程的启动和停止的相关文章

Tomcat7.0源码分析——启动与停止服务

前言 熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的.对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. 由于在生产环境中,Tomcat一般部署在Linux系统下,所以本文将以startup.s

Tomcat7.0源码分析——启动与停止服务原理

前言 熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的.对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. 由于在生产环境中,Tomcat一般部署在Linux系统下,所以本文将以startup.s

Tomcat源码分析——启动与停止服务

前言 熟悉Tomcat的工程师们,肯定都知道Tomcat是如何启动与停止的.对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处理命令,大家一定知道改如何使用它,但是它们究竟是如何实现的,尤其是shutdown.sh脚本(或者shutdown.bat)究竟是如何和Tomcat进程通信的呢?本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. 由于在生产环境中,Tomcat一般部署在Linux系统下,所以本文将以startup.s

EasyHook库系列使用教程之四钩子的启动与停止

此文的产生花费了大量时间对EasyHook进行深入了解同时参考了大量文档 先来简单比较一下EasyHook与Detour钩取后程序流程 Detours:钩取API函数后,产生两个地址,一个地址对应真Hook函数地址,一个对应真实API地址 EasyHook:钩取API函数后,所有API指向同一地址,通过ACL控制是否跳转到真实API地址 Detour:只要钩取之后,相关于一个API变成两个函数 EasyHook:钩取之后,相关于还是一个API,通过控制ACL来判断是否跳转到真实API EasyH

Elasticsearch启动、停止脚本

注:本文出自博主:chloneda Elasticsearch官网 构建Elasticsearch启动脚本 start_es.sh. #!/bin/bash export ES_HOME=xxx su elastic -c "sh ${ES_HOME}/bin/elasticsearch -d -p ${ES_HOME}/pid" 参数说明: su:登录用户. elastic:部署Elasticsearch用户,避免root用户而无法启动. c:c参数后跟具体命令. d:Elastic

Nginx编译安装,启动,停止,升级。

1.简单介绍下Nginx Nginx是一款轻量级的web服务器和反向代理服务器,它使用了epoll的I/O模型,也就是事件触发I/O模型,减少了进程的生成切换所消耗的系统资源(CPU的压力减少,内存的占用也会减少),可以达到很高的并发请求.它是一款开源软件,企业成本降低,它的使用配置也比较简单,同时支持Rewrite,作为反向代理的时候可以检查后端的Web服务器的健康状况,能够支持热部署. 2.Nginx安装,重启,升级,停止. 环境是Centos系统,通过www.nginx.org下载需要的源

Appium+Python app自动化测试之脚本启动和停止Appium服务

研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb devices获取),然后启动相应数量的Appium 服务,以便每个设备执行时并发进行并且互不影响.当然也可以通过selenium grid来实现,只是目前还在学习研究中,还是先把目前启动多个appium服务实现的方式记录下来. 一.Windows下启动单个appium服务 需要启动多个appium服务

oracle rac的启动与停止

引言:这写篇文章的出处是因为我的一名学生最近在公司搭建RAC集群,但对其启动与关闭的顺序和原理不是特别清晰,我在教学工作中也发现了很多学员对RAC知识了解甚少,因此我在这里就把RAC里面涉及到的最常用的启动与关闭顺序和命令逐一列举出来,由于RAC的后台资源较多,因此涉及到的命令也很多,最后附上帮助手册让在工作中临时使用时也可以迅速查到,如果这篇文章能够帮到大家就是我今后继续努力撰写的动力,感谢大家对我文章的浏览多提宝贵意见. 11G RAC启动关闭简单的多. 关闭:1,oracle用户关闭服务.

shell脚本批量/单独启动、停止、重启java独立jar程序

本人最近半年使用阿里dubbo做开发,并在公司内部大力进行推广,将原来一个笨重且不易于维护的大项目切分成多个相对独立的java程序,好处是显而易见的,但是随着切分的独立运行程序包越来越多,程序的部署变成了一件非常头痛的问题,无耐之下,本人想到可否写一个shell脚本来批量/单独启动.停止.重启这些独立的java程序,之前没有写过shell脚本,研究二天后,终于将这个脚本写出来了,以后部署起来方便多了,废话不多说,直接贴上shell脚本,有需要的朋友可以根据自己项目修改前面的程序代码数组.程序名称