惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
MyScale Blog
MyScale Blog
博客园_首页
G
Google Developers Blog
博客园 - 【当耐特】
美团技术团队
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
小众软件
小众软件
博客园 - 司徒正美
雷峰网
雷峰网
T
Tailwind CSS Blog
V
V2EX
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
罗磊的独立博客
量子位
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog

博客园 - 代码猫

Spring boot 打成jar包,并运行jar包。 MySQL中两个DateTime字段相减,得到秒,分,天数 mybatis中大于等于小于等于的写法 Spring boot 自定义注解,Java通过反射获取注解,及注解的说明,附源码下载! Spring boot 自定义注解+@Aspect实现切面输出日志,附源码下载! HTML5 Canvas基础教程 SpringBoot+Jpa动态切换多数据源配置及实现 MySQL使用DATE_FORMAT()函数格式化日期 Java List转String数组与String数组转List MySQL使用IF函数来动态执行where条件 JPA忽略实体类某属性,不持久化某字段的解决方法 git 常用命令 Windows系统CMD窗口下,MySQL建库、还原数据库命令操作示例 Java JPA 报java.lang.IllegalArgumentException: Validation failed for query for method public abstract ...异常的一种原因和解决办法 MySQL 5.7 执行SQL报错:1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 的解决办法 windows查看端口被占用情况 Windows环境下设置Tomcat8以服务的形式运行,不再打开Tomcat窗口 MySql添加字段命令 Java中String、LocalDateTime、LocalDate、Date互转
Java8使用实现Runnable接口方式创建新线程的方法
代码猫 · 2019-12-24 · via 博客园 - 代码猫

环境介绍

JDK版本:1.8

开发架构:spring boot 2.x

日志:slf4j

实现步骤

Runnable接口中只有一个run()方法,它是非Thread类子类的类提供的一种激活方式。一个类实现Runnable接口后,并不代表该类是一个“线程”类,不能直接运行,必须通过Thread实例才能创建并运行线程。

通过Runnable接口创建线程的步骤如下:

1、定义实现Runnable接口的类,并实现该类中的run()方法。

2、建立一个Thread对象,并将实现的Runnable接口的类的对象作为参数传入Thread类的构造方法。

3、通过Thread类中的start()方法启动线程,并运行。

Runnable实现类代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * Runnable实现类
 */
public class ImportAddWeatherTaskAction implements Runnable {
    //日志
    private final static Logger logger = LoggerFactory.getLogger(ImportAddWeatherTaskAction.class);
    //定义线程
    private Thread t;
    private String threadName;
    //构造函数
    public ImportAddWeatherTaskAction(String threadName) {
        this.threadName = threadName;
    }
    
    public void start() {
        if (t == null) {
            t = new Thread (this, threadName);
            t.start();
        }
    }

    public void run(){
        logger.info("线程开始运行:" + threadName);
        //这里写在新线程中要实现的逻辑
        logger.info("线程执行结束!");
    }
}

调用线程实现类

/**
 * 调用线程实现类(在其他服务实现类中编写此方法)
 */
public String importAddWeatherData(){
    //实现化
    ImportAddWeatherTaskAction R1 = new ImportAddWeatherTaskAction("线程名称");
    R1.start();
    return "线程已启动...";
}