SchuledExecutorService 使用controller控制线程关闭

1:SchuledExecutorService  使用controller控制线程关闭

package com.li.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @program: GradleTestUseSubModule
 * @author: Yafei Li
 * @create: 2018-06-16 09:01
 * 调度线程控制器,定时执行
 **/
@Controller
public class ScheledThreadController {
    ScheduledExecutorService scheduledExecutorService=new ScheduledThreadPoolExecutor(2);  //指定线程个数

    @RequestMapping("/start")
    @ResponseBody
    public void start() {

            scheduledExecutorService.scheduleAtFixedRate(new Runnable() {  //以固定频率执行,线程1
                @Override
                public void run() {
                    System.out.println(Thread.currentThread()+"开启了"+System.currentTimeMillis());
                }
            }, 10,10,TimeUnit.SECONDS);

            scheduledExecutorService.scheduleAtFixedRate(new Runnable() {  //以固定频率执行,线程2
                @Override
                public void run() {
                    System.out.println(Thread.currentThread()+"开启了"+System.currentTimeMillis());
                }
            }, 10,10,TimeUnit.SECONDS);
    }

    @RequestMapping("/stop")
    @ResponseBody
    public String stop() {
        scheduledExecutorService.shutdown();

        boolean shutdown = scheduledExecutorService.isShutdown();
        if (shutdown) {
            return "关闭成功";
        }
        return "关闭失败";
    }
}

原文地址:https://www.cnblogs.com/liyafei/p/9189855.html

时间: 2024-10-08 01:20:13

SchuledExecutorService 使用controller控制线程关闭的相关文章

java-线程-使用阻塞队列(BlockingQueue)控制线程通信

BlockingQueue是一个接口,也是Queue的子接口.BlockingQueue具有一个特征:当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则线程被阻塞:但消费者线程试图从BlockingQueue中取出元素时,如果队列已空,则该线程阻塞. 程序的两个线程通过交替向BlockingQueue中放入元素.取出元素,即可很好地控制线程的通信. BlockingQueue提供如下两个支持阻塞的方法: put(E e):尝试把Eu元素放如BlockingQueue中,

Java中怎么控制线程访问资源的数量

在API中是这样来描述Semaphore 的 Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目. 一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者.但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动. 例如,下面的类使用信号量控制线程并发的数量 import java.util.c

[转载]C# 多线程、控制线程数提高循环输出效率

C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段10条数据. int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Convert.ToInt32(createCount.Value) / 10 : Convert.ToInt32(createCount.Value) / 10 + 1

线程的学习-1,控制线程数量,模仿的

学会了控制线程数量,目前感觉使用c#5.0的新特性灵活性不如之前的线程使用,所以不是很喜欢用新特性,不过也可能是我还没熟悉,等以后熟悉清楚了,再评价好不好,今天先搞一搞控制线程数量 public class TaskTest { public void Test() { List<Task> list = new List<Task>(); TaskFactory taskFactory = new TaskFactory(); for (int i = 0; i < 100

MySQL控制(关闭、打开)自动提交功能

在MySQL中执行命令时,通常都直接被确定提交了.也就是说用户不用意识此事,所有的命令都会被自动COMMIT.特别是当存储引擎为MyISAM的情况下,本身它是不支持事务处理的,只要执行了命令,所有的命令部会被提交. 这样的默认自动提交的功能就被称为自动提交功能.自动提交功能默认被置为ON的状态.但是,如果存储引擎为InnoDB 时,当执行了START TRANSACTION或BEGIN命令(MySQL事务处理-删除后回滚)后,将不会自动提交了,只有明确执行了COMMIT命令后才会被提交,在这之前

按键精灵 用全局变量控制线程 子线程控制主线

//************************************************用全局变量控制线程 子线程控制主线 Global b b = 1 线程控制ID = BeginThread(线程控制)//启动线程 While b=1 Delay 2000 Call Plugin.Msg.Tips("我是主线程") wend Rem aaa Delay 8000 While b=2 Delay 2000 Call Plugin.Msg.Tips("我是主线程副

多线程总结三:控制线程

Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好的控制线程的执行. 1.join线程:join 当某个程序执行流中调用其他线程的join()方法时,执行中的线程会被阻塞,直到被join()方法加入的join线程执行完为止.join()方法将大问题划分为许多小问题,每个小问题分配一个线程,当所有的小问题都得到处理以后,再调用主线程来进一步操作. 1 /** 2 * @Title: JoinThread.java 3 * @Package 4 * @author 任伟 5

thread :控制线程

 控制线程 我们使用Thread创建线程后,我们需要对线程进行控制. 1.  使用Start()方法使线程处于Running状态,线程开始执行. 2.  使用Join()方法使线程处于WaitSleepJoin状态,在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时   间为止. 3.  使用Sleep()方法,也会使线程处于WaitSleepJoin状态,在经历Sleep()方法定义的时间段后,线程就会被再次唤醒.. 4.  使用

C# 多线程、控制线程数提高循环输出效率

原文:C# 多线程.控制线程数提高循环输出效率 C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段10条数据. int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Convert.ToInt32(createCount.Value) / 10 : Convert.ToInt32(cre