Java创建线程的方式解析

 更新时间:2022年07月28日 11:25:15   作者:0x3f3f3f3f  
这篇文章主要介绍了Java创建线程的方式解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助

继承Thread,这里使用匿名内部类

@Slf4j(topic = "c.Test1")
public class Test1 {
    public static void main(String[] args) {
        //创建线程对象
        Thread t = new Thread(){
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //设置线程的名字
        t.setName("t1");
        //启动线程
        t.start();
        log.debug("running");
    }
}
/*
19:44:31.998 [main] DEBUG c.Test1 - running
19:44:31.998 [t1] DEBUG c.Test1 - running
*/

实现Runnable接口,配合Thread类,同样用匿名内部类

  • 把线程和任务分开
  • Thread表示线程
  • Runnable代表可运行的任务
@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}
//19:52:27.646 [t2] DEBUG c.Test2 - running

在javajava中,有@FunctionalInterface@FunctionalInterface注解意味着该接口只有一个抽象方法,即可以用lambdalambda表达式的方式简化

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            //要执行的任务
            log.debug("running");
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}

FutureTask配合Thread

因为FutureTask可以接口一个Callable类型的参数,用来处理有返回值的情况

@Slf4j(topic = "c.Test3")
public class Test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建任务对象
        FutureTask<Integer> task = new FutureTask<>(() -> {
            log.debug("running");
            Thread.sleep(1000);
            return 100;
        });
        /*
        用lambda化简前
         */
        FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                log.debug("running");
                Thread.sleep(1000);
                return 100;
            }
        });
        //参数1是任务的对象, 参数2是线程的名字
        Thread t = new Thread(task, "t3");
        t.run();
        //主线程堵塞,同步等待task执行完毕的结果
        Integer integer = task.get();
        log.debug("结果是:{}", integer);
    }
}

到此这篇关于Java创建线程的方式解析的文章就介绍到这了,更多相关Java创建线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java编程实现中英混合字符串数组按首字母排序的方法

    Java编程实现中英混合字符串数组按首字母排序的方法

    这篇文章主要介绍了Java编程实现中英混合字符串数组按首字母排序的方法,涉及Java字符串操作及拼音转换的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 解读spring.factories文件配置详情

    解读spring.factories文件配置详情

    这篇文章主要介绍了解读spring.factories文件配置详情,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Springmvc自定义参数转换实现代码解析

    Springmvc自定义参数转换实现代码解析

    这篇文章主要介绍了Springmvc自定义参数转换实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 详解SpringMVC学习系列(6) 之 数据验证

    详解SpringMVC学习系列(6) 之 数据验证

    这篇文章主要介绍了详解SpringMVC学习系列(6) 之 数据验证 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Spring Boot源码实现StopWatch优雅统计耗时

    Spring Boot源码实现StopWatch优雅统计耗时

    这篇文章主要为大家介绍了Spring Boot源码实现StopWatch优雅统计耗时,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java源码解析之接口List

    Java源码解析之接口List

    今天带大家复习Java基础的一些知识点,对接口List进行了详细的解析,对正在学习Java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • ReentrantLock从源码解析Java多线程同步学习

    ReentrantLock从源码解析Java多线程同步学习

    这篇文章主要为大家介绍了ReentrantLock从源码解析Java多线程同步学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 深入了解Java虚拟机栈以及内存模型

    深入了解Java虚拟机栈以及内存模型

    这篇文章主要介绍了深入了解Java虚拟机栈以及内存模型,文中有非常详细的代码示例,对正在学习java的小伙伴们有很大的帮助,需要的朋友可以参考下
    2021-04-04
  • Java数据结构之线性表

    Java数据结构之线性表

    线性表是其组成元素间具有线性关系的一种数据结构,对线性表的基本操作主要有,获取元素,设置元素值,遍历,插入,删除,查找,替换,排序等。而线性表可以采用顺序储存结构和链式储存结构,本节主要讲解顺序表、单链表以及双链表的各种基本操作。
    2017-03-03
  • Java8 Stream collect(Collectors.toMap())的使用

    Java8 Stream collect(Collectors.toMap())的使用

    这篇文章主要介绍了Java8 Stream collect(Collectors.toMap())的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论