前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【thread】开启关闭线程

【thread】开启关闭线程

原创
作者头像
无敌小菜鸟
发布2022-07-25 13:52:50
6990
发布2022-07-25 13:52:50
举报
文章被收录于专栏:搬砖笔记搬砖笔记

之前碰到过这样一个需求,开启一个测试子线程,还要能手动的去关闭,下面是我的实现方法。

一、开启线程

通过接口开启线程,开启后将线程id放入到map中。

代码语言:javascript
复制
    //  存放线程ids
    Map<String, Long> mapThreadIds = new HashMap<>();

开启

代码语言:javascript
复制
    @ApiOperation("开")
    @PostMapping("/test1")
    public Result test1() {
        Thread thread = new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                while (true) {
                    Thread.sleep(1000);
                    String now = DateUtil.now();
                    System.out.println(now);
                }
            }
        });
        long id = thread.getId();
        mapThreadIds.put("thread", id);
        thread.start();
        return Result.ok();
    }

二、关闭线程

通过线程id获取线程对象,然后调用stop方法关闭线程。

我这需求是强制关闭就行啦,不用考虑数据完整性问题。

代码语言:javascript
复制
    @ApiOperation("关")
    @PostMapping("/test2")
    public Result test2() {
        Long air = mapThreadIds.get("thread");
        Thread thread = findThread(air);
        if (thread != null) {
            thread.stop();
        }
        return Result.ok();
    }

核心方法

通过线程id,获取线程对象

代码语言:javascript
复制
    /**
     * 通过线程id获取对象
     * @param threadId
     * @return
     */
    public static Thread findThread(long threadId) {
        ThreadGroup group = Thread.currentThread().getThreadGroup();
        while (group != null) {
            Thread[] threads = new Thread[(int) (group.activeCount() * 1.2)];
            int count = group.enumerate(threads, true);
            for (int i = 0; i < count; i++) {
                if (threadId == threads[i].getId()) {
                    return threads[i];
                }
            }
            group = group.getParent();
        }
        return null;
    }

总结

腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、开启线程
  • 二、关闭线程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档