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()*/@Overridepublic 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()*/@Overridepublic 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);}@Overridepublic 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);*/}@Overridepublic 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() {}@Overridepublic 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);}@Overridepublic 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()*/@Overridepublic 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();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Apipost一键压测参数化功能详解

最近更新中Apipost对UI页面进行了一些调整&#xff0c;另外一键压测功能支持参数化&#xff01;本篇文章将详细介绍这些改动&#xff01; API调试页面的细节改动 在请求区填入请求参数或脚本时会有相应的标识 如在Query中填入多个参数时上方会展示数量 在预、后执行脚本中写…

基于Java车间工时管理系统(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

海外社媒营销避坑指南:盘点最容易被人忽视的7大坑!

在全球数字化浪潮的推动下&#xff0c;海外社媒营销成为企业推广品牌、产品和服务的重要途径。然而&#xff0c;与其诱人的前景相对应的是众多的坑&#xff0c;需要企业精心规划和巧妙应对。本文Nox聚星将和大家盘一盘企业在海外社媒营销之路上最容易忽视的7个大坑&#xff0c;…

一面“短刀”出鞘,一面撤回IPO,蜂巢能源决定求稳

刚刚在12月12日的第四届电池日上全球首发蜂速超快充磷酸铁锂短刀电池&#xff0c;10天之后便主动撤回已经过上交所两次问询的IPO申请&#xff0c;终止了自己奔赴科创板的上市之旅。动力电池新贵蜂巢能源这套动作&#xff0c;让市场颇为遗憾——虽然当前国内资本市场环境确实不同…

AI赋能金融创新:技术驱动的未来金融革命

人工智能&#xff08;AI&#xff09;作为一种技术手段&#xff0c;正逐渐改变金融行业的方方面面。从风险管理到客户体验&#xff0c;从交易执行到反欺诈&#xff0c;AI带来了许多创新和机遇。本文将探讨AI在金融领域的应用和其赋能的金融创新。 金融领域一直以来都面临着复杂的…

计算机网络【DHCP动态主机配置协议】

DHCP 出现 电脑或手机需要 IP 地址才能上网。大刘有两台电脑和两台手机&#xff0c;小美有一台笔记本电脑、一台平板电脑和两台手机&#xff0c;老王、阿丽、敏敏也有几台终端设备。如果为每台设备手动配置 IP 地址&#xff0c;那会非常繁琐&#xff0c;一点儿也不方便。特别是…

潜力股的印度市场,为啥被风险投资人看空了?

KlipC报道&#xff1a;自2021年第四季度&#xff0c;印度超过英国&#xff0c;稳居世界第五大经济体之后&#xff0c;“印度市场”的潜力被不断提及。 KlipC的分析师Allen表示&#xff1a;“但对于风险投资行业来说&#xff0c;从2023年的数据看&#xff0c;似乎像是遭遇了一场…

鸿鹄电子招投标系统:源码级别解析电子招投标的精髓

招投标管理系统是一个集门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理于一体的综合性应用平台。它适用于招标代理、政府采购、企业采购和工程交易等业务的企业&#xff0c;旨在提高项目管理的效率和质量。该系…

SpireCV项目实战——电诈园区人员及房屋情况识别

项目介绍前言 随着科技的进步和大数据时代的到来&#xff0c;计算机视觉技术逐渐渗透到各个行业领域&#xff0c;为人们的生活和工作带来了诸多便利。近年来&#xff0c;电信诈骗案件频发&#xff0c;给社会带来了巨大的经济损失和心理负担。电诈园区作为电信诈骗的高发区域&a…

【PyQt5】QComboBox文字居中

你永远也无法预料到&#xff0c;Qt到底埋了多少坑(我的是PyQt5)&#xff0c; 一个破文本居中都要搞那么麻烦 一堆样式这里不生效那里不生效的真的是离谱 代码运行结果&#xff1a; import sys from PyQt5.QtWidgets import QApplication,QComboBox from PyQt5.QtWidgets impor…

Threejs 标签添加(单标签/多标签)

前言&#xff1a;网上写这个太少了&#xff0c;还写的乱&#xff0c;我就简单的整理下大家看下就会&#xff0c;有问题可以关注公众号: 技术链 1、创建工程vue 这个可以直接用命令创建 2、引入安装Threejs 依赖 3、编写标签引入依赖&#xff0c;可以使用 CSS2DRenderer,CSS3D…

堪比Postman!这款IDEA插件真好用!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

【计算机毕业设计】SSM游戏点评网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,游戏资讯管理,游戏类型管理,城市信息管理,竞技场管理,游戏信息管理,游戏评价信息管理等功能。…

【Spark精讲】一文讲透SparkSQL物理执行计划

SparkSQL整体计划生成流程 大体分三步&#xff1a; (1)由 SparkSqlParser 中的 AstBuilder执行节点访问&#xff0c;将语法树的各种Context节点转换成对应的 LogicalPlan 节点&#xff0c;从而成为一棵未解析的逻辑算子树(Unresolved LogicalPlan)&#xff0c;此时的逻辑算子树…

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

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

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题&#xff0c;目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

电脑报错缺失vcomp140.dll无法执行代码怎么解决?快速的修复vcomp140.dll方案

vcomp140.dll无法执行代码怎么解决&#xff1f;vcomp140.dll是常见的系统文件&#xff0c;许多用户遇到它缺失导致程序无法运行的问题。本文旨在提供彻底解决此问题的方法&#xff0c;并对vcomp140.dll文件本身进行了简要说明。 以下是几种修复缺失的vcomp140.dll文件的方法 第…

【HBuilder + IDEA + XFtp + XShell】打包部署上线

简述 前后端分离&#xff1a;需要将前后端的程序包打包发送至应用Linux服务器上Linux服务器 &#xff08;1&#xff09;需要启用SSHD服务&#xff0c;该服务会监听22号端口&#xff08;一般是开启的&#xff09; &#xff08;2&#xff09;搭建&#xff1a;MYSQL、Nginx、jdk、…

函数式编程的妙用

前言 我们平常项目中维护的比较多的就是实体类中的数量问题&#xff0c;我们最常见的做法就是通过get方法读取旧数据&#xff0c;然后进行新数据的set 。这套方法相对来说是比较统一固定的&#xff0c;如果有多处地方使用&#xff0c;我们可以想着通过Function和BiConsumer的函…