Java创建线程执行任务的方法(一)

目录

1.继承Thread类

2.实现Runnab类

2.1实现Runnable类

2.2使用Lambda表达式

3.实现Callable类

3.1返回Integer类型数据

3.2返回String类型数据

3.3返回Object类型数据

4.匿名内部类


创建线程的方法:继承Thread类;实现Runnab类;匿名内部类;实现Callable类

1.继承Thread类

/**继承Thread类*/
public class ThreadDemo extends Thread{
    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        /**start() 启动当前线程;调用当前线程run()方法*/
        threadDemo.start();
    }

    /**重写run()*/
    @Override
    public void run() {
        /**执行run()中间的任务*/
        int num =100;
        for (int i=1;i<=num;i++){
            if (i%2 ==0){
                System.out.println("1-100的偶数为:" + i);
            }
        }
    }
}

2.实现Runnab类

2.1实现Runnable类

/**实现Runnable类*/
public class ThreadDemo implements Runnable {
    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        /**获取Thread对象,将自定义的ThreadDemo对象存进去*/
        Thread thread = new Thread(threadDemo);
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }

    /**重写run()*/
    @Override
    public void run() {
        /**执行run()中间的任务*/
        int num =100;
        for (int i=1;i<=num;i++){
            if (i%2 ==0){
                System.out.println("1-100的偶数为:" + i);
            }
        }
    }
}

 2.2使用Lambda表达式

/**Lambda表达式*/
public class ThreadDemo {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            int num = 20;
            for (int i = 1; i <= num; i++) {
                if (i % 2 != 0) {
                    System.out.println("1-20的奇数为:" + i);
                }
            }
        });
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }
}
/**Lambda表达式*/
public class ThreadDemo {
    public static void main(String[] args) {
        new Thread(() -> {
            /**执行->箭头后面的任务*/
            System.out.println("线程");
        }).start();
    }
}

3.实现Callable类

当 FutureTask 处于未启动或已启动状态时,执行 FutureTask.get()方法将导致调用线程阻塞。如果 FutureTask 处于已完成状态,调用FutureTask.get()方法将导致调用线程立即返回结果或者抛出异常。

3.1返回Integer类型数据

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**Callable方法*/
public class ThreadDemo implements Callable<Integer> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Integer> integerFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(integerFutureTask);
        thread.start();
        Integer result = integerFutureTask.get();
        System.out.println(result);
    }

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 10; i++){
            sum += i;
        }
        return sum;
    }
}

3.2返回String类型数据

/**Callable方法*/
public class ThreadDemo implements Callable<String> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> stringFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(stringFutureTask);
        thread.start();
        /**输出 线程进行中 */
        String result = stringFutureTask.get();
        System.out.println(result);
        /**输出 Thread-0 */
        /*String name = thread.getName();*/
        /*System.out.println(name);*/
    }

    @Override
    public String call() throws Exception {
        return "线程进行中";
    }
}

3.3返回Object类型数据

public class User {
    private String name = "张三";
    private int age = 18;
    private String gender ="男";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public User(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}
/**Callable方法*/
public class ThreadDemo implements Callable<Object> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Object> stringFutureTask = new FutureTask<>(new ThreadDemo());
        Thread thread = new Thread(stringFutureTask);
        thread.start();
        Object result = stringFutureTask.get();
        /**输出 User{name='张三', age=18, gender='男'}*/
        System.out.println(result);
    }

    @Override
    public Object call() throws Exception {
        User user = new User();
        /** 返回 包名.类名@哈希码值(demo.User@135fbaa4)*/
        /*return user;*/
        /**返回 User{name='张三', age=18, gender='男'}*/
        return user.toString();
    }
}

4.匿名内部类

/**匿名内部类*/
public class ThreadDemo {
    public static void main(String[] args) {
        /**获取Thread对象,使用匿名内部类方式获取Runnable对象*/
        Thread thread = new Thread(new Runnable() {
            /**重写run()*/
            @Override
            public void run() {
                /**执行run()中间的任务*/
                int num = 100;
                for (int i = 1; i <= num; i++) {
                    if (i % 2 != 0) {
                        System.out.println("1-100的奇数为:" + i);
                    }
                }
            }
        });
        /**start() 启动当前线程;调用当前线程run()方法*/
        thread.start();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度解析高防产品---游戏盾

游戏盾是针对游戏行业所推出的高度可定制的网络安全解决方案&#xff0c;游戏盾是高防产品系列中针对游戏行业的安全解决方案。游戏盾专为游戏行业定制&#xff0c;针对性解决游戏行业中复杂的DDoS攻击、游戏CC攻击等问题。游戏盾通过分布式的抗D节点&#xff0c;可以防御TB级大…

归并算法:分治而治的高效算法大揭秘(图文详解)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并算法是我们算法中最常见的算法之一&#xff0c;其思想非常巧妙。本身归并是只能归并有序数组…

迁移Ubuntu报错问题

问题描述&#xff1a; 使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时&#xff0c;出现如下报错 ‘Couldn’t set the case sensitive attribute of the directory “\?\C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\Loc…

Typora使用PicGo+Gitee上传图片报错403 Forbidden

Typora使用PicGoGitee上传图片报错403 Forbidden Typora使用PicGoGitee上传图片&#xff0c;上传失败了&#xff0c;错误信息如下 打开PicGo的日志文件查看&#xff0c;可以看到错误详情如下 换了一个插件github-plus重新配置&#xff0c;解决了这个问题 再打开日志查看&…

ubuntu:beyond compare 4 This license key has been revoked 解决办法

https://www.cnblogs.com/zhibei/p/12095431.html 错误如图所示&#xff1a; 解决办法&#xff1a; &#xff08;1&#xff09;先用find命令找到bcompare所在位置&#xff1a;sudo find /home/ -name *bcompare &#xff08;2&#xff09;进入 /home/whf/.config,删除/bco…

计算机网络——应用层与网络安全(六)

前言&#xff1a; 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解&#xff0c;下面让我们对它的最顶层&#xff0c;应用层进行一个简单的学习与认识&#xff0c;由于计算机网络多样的连接形式、不均匀的终端分布&#xff0c;以及网络的开放性和互联性等特征&…

VerticalGridView适配触摸屏踩坑,触摸滑动时位置重置/闪烁问题

VerticalGridView是什么? VerticalGridView是安卓leanback库的列表组件,用于支持使用遥控器(按键事件)浏览列表。 它与RecyclerView的继承关系是:VerticalGridView→BaseGridView→RecyclerView 首先我想吐槽一下leanback的BaseGridView相关组件,耦合度较高,并且不允许开…

DOA估计算法——迭代自适应算法(IAA)

1 简介 迭代自适应法 (Iterative Adaptive Approach&#xff0c;IAA)估计算法最早由美国的电气工程师和数学家Robert Schmidt和Roy A. Kuc在1986年的一篇论文"Multiple Emitter Location and Signal Parameter Estimation"中首次提出了这一算法&#xff0c; IAA DOA …

[LitCTF 2023]作业管理系统

[LitCTF 2023]作业管理系统 信息搜集 进来发现要登录&#xff1a; 但是别着急&#xff0c;先查看源码或者抓个包&#xff1a; 可以看到源码中给出了提示&#xff1a;默认账户admin admin 。 账户名&#xff1a;admin&#xff0c;密码&#xff1a;admin&#xff0c;成功登录。…

腾讯云轻量应用服务器租用优惠价格表(多配置报价)

腾讯云轻量应用服务器优惠价格表&#xff0c;12月最新报价&#xff0c;腾讯云轻量2核2G3M带宽62元一年、2核2G4M轻量服务器118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元三年、4核8G12M轻量服务器646元15个月&#xff0c;CVM云服务器S5实例2核2G配置…

Gin 源码深度解析及实现

介绍 什么是 gin &#xff1f; 一个轻量级高性能 HTTP Web 框架。 Introduction | Gin Web Framework (gin-gonic.com) Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。 为什么使用 gin &#xff1f; In…

基于CNN和双向gru的心跳分类系统

CNN and Bidirectional GRU-Based Heartbeat Sound Classification Architecture for Elderly People是发布在2023 MDPI Mathematics上的论文&#xff0c;提出了基于卷积神经网络和双向门控循环单元(CNN BiGRU)注意力的心跳声分类&#xff0c;论文不仅显示了模型还构建了完整的…

车联网的安全风险与应对措施

安全风险 1、恶意软件 攻击者可以通过入侵厂商或供应商网络&#xff0c;用恶意软件&#xff08;如病毒、木马、勒索软件等&#xff09;感染车联网系统组件&#xff0c;从而获得对车辆的控制权或窃取敏感信息。例如&#xff0c;一名安全研究人员成功入侵了特斯拉&#xff08;T…

Vue使用Element table表格格式化GMT时间为Shanghai时间

Vue使用Element表格格式化GMT时间为Shanghai时间 说明 阿里巴巴java开发规范规定&#xff0c;数据库必备gmt_create、gmt_modified字段&#xff0c;使用的是GMT时间&#xff0c;在中国使用必然要转换我中国时间。 在阿里巴巴的Java开发规范中&#xff0c;要求每个表都必备三…

【C语言深度剖析——第一节(关键字1)】《C语言深度解剖》+蛋哥分析+个人理解

你未曾见过火光&#xff0c;难怪甘愿漂泊寒夜 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 首先简单介绍一下《C语言深度解剖》&#xff1a; 全书特点&am…

一起玩儿物联网人工智能小车(ESP32)——19. MicroPython集成开发环境Thonny的安装

摘要&#xff1a;本文主要介绍MicroPython集成开发环境Thonny的安装方法和基本的使用 Thonny是一个开源的、轻量级的MicroPython集成开发环境&#xff0c;它非常的小巧和精简。对于我们日常ESP32的开发来说&#xff0c;已经完全满足要求了。这个开发软件支持windows、Linux和Ma…

聚焦企业未来新发展,同花顺对话麒麟信安杨涛董事长

打好经济增长主动仗 聚焦企业未来新发展 同花顺“对话湖南上市公司高管系列活动” 本期走进麒麟信安 对话麒麟信安杨涛董事长 畅谈国产操作系统领军企业的创新发展之路 并就麒麟信安产品应用布局及 未来发展规划等方面进行深入交流 麒麟信安-成片1改20231218

统一入口,全面提升工作效率,WorkPlus超级APP引领数字化办公新潮流

在数字化办公的时代&#xff0c;企业往往面临着多个应用管理的挑战。员工需要在众多应用之间切换&#xff0c;记忆不同的登录凭证&#xff0c;这不仅分散了注意力&#xff0c;还降低了工作效率。为了应对这一问题&#xff0c;企业需要一站式的解决方案&#xff0c;通过整合繁杂…

盘点2023 | 校企合作结硕果,产教融合谱新篇

回首2023&#xff0c;电巢科技与众多高校建立了紧密的合作关系&#xff0c;以实习就业为导向&#xff0c;帮助学生打开技术和产业视野&#xff0c;提前做好职业发展规划&#xff0c;按照电子行业的企业用人标准&#xff0c;帮助高校进行“人才前置化”培养&#xff0c;并且持续…

4.Python数据序列

Python数据序列 一、作业回顾 1、面试题 有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何? 白话文:有一个数字,不知道具体是多少,用3去除剩2,用5去除剩3,用7去除剩2个,问这个数是多少?1 ~ 100以内的整数 while循环: # 初始化计数器 i = …