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://www.mzph.cn/news/584511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何文件从电脑传到iPhone,这里提供几个方法

本文介绍了如何使用Finder应用程序、iTunes for Windows、iCloud和谷歌照片将照片从Mac或PC传输到iPhone。 如何将照片从Mac传输到iPhone 如果你有一台Mac电脑&#xff0c;里面装满了你想转移到iPhone的照片&#xff0c;这是一件非常简单的事情。只需遵循以下步骤&#xff1a…

Python中matplotlib库的使用1

1 matplotlib库简介 matplotlib是一个数学绘图库&#xff0c;可以将数据通过图形的方式显示出来&#xff0c;也就是数据可视化。 2 matplotlib库的安装 2.1 打开cmd窗口 点击键盘的“Win”“R”键&#xff0c;在弹出的“运行”对话框的“打开”栏中输入“cmd”&#xff0c;…

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

循环冗余效验码的计算方法

循环冗余效验码的计算方法 G&#xff08;x&#xff09;&#xff1a; 在了解计算方法之前我们首先要明白G&#xff08;x&#xff09;表明的意思&#xff0c;这一步非常重要&#xff01; 例如&#xff0c;G&#xff08;x&#xff09; x^3 x^2 1 &#xff0c;该式子表明的编…

vue3 数据转换

只需要添加 const taskHeader JSON.parse(JSON.stringify(now))

基于huffman编解码的图像压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Huffman编码算法步骤 4.2 Huffman编码的数学原理 4.3 基于Huffman编解码的图像压缩 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..…

【操作系统】不同操作系统内核架构分析

一、内核架构与操作系统性能之间的关系的分析 1. 适用性和专业化&#xff1a; 不同的内核架构往往会有不同的设计目标和优化点。例如&#xff0c;实时操作系统&#xff08;RTOS&#xff09;和通用操作系统&#xff08;像Linux或Windows&#xff09;在设计时就有不同的重点&am…

【Python基础011】Python中字符串的具体用法

1、创建 字符串的创建共有3种方式 1&#xff09;单/双引号创建短字符串 s hello worlds “hello world” 2&#xff09;三个单/双引号创建短字符串 三个单/双引号一般用于多行文本的注释&#xff0c;如果将这样的字符串用print打印&#xff0c;或者赋给一个变量&#xff0c;…

3D游戏角色建模纹理贴图处理

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 在本文中&#xff0c;我们将介绍 3D 纹理的基础知识&#xff0c;并讨…

【C语言】数据结构——排序二(快排)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 交换排序1.1 基本思想&#xff1a;1.2 冒泡与快排的异同 2. 冒泡排序2.1 基本思想2.2 …

【Unity动画系统】Animator有限状态机参数详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

校园跑腿小程序源码系统:取快递+寄快递+食堂超市跑腿 带完整的搭建教程

现如今&#xff0c;越来越多的校园生活服务需求涌现出来。为了满足学生们的日常需求&#xff0c;校园跑腿小程序应运而生。这款小程序集成了取快递、寄快递、食堂超市跑腿等功能&#xff0c;为学生们提供了一个方便、快捷的生活服务平台。 以下是部分代码的示例&#xff1a; 系…

如何使用工具查看机系统信息,应用管理、文件管理

摘要 克魔助手是一款功能丰富的手机助手软件&#xff0c;提供了诸多实用的功能模块&#xff0c;包括手机系统信息显示、应用管理、文件管理、描述文件安装与测试、崩溃日志、实时日志、截图、活跃程序、性能监控和网络抓包等。本文将对克魔助手的界面概览和各功能模块进行详细…

数据结构面试题目

什么是数据结构&#xff1f;计算机存储、组织数据的方式。数据结构包括逻辑结构、物理结构和对数据的一系列操作。其中逻辑结构包括了线性结构&#xff08;线性表、栈和队列&#xff09;和非线性结构&#xff08;树、图&#xff09;&#xff1b;物理结构包括顺序存储结构和链式…

UGUI:一个轻量级的TFTLCD彩色显示屏GUI库

目录 一、引言 二、移植说明 三、如何使用UGUI函数 2.1 UGUI函数介绍 2.2 窗口控件管理 2.3 如何建立一个按键 四、如何实现触摸控制 一、引言 UGUI是一个经过精心设计的轻量级TFT-LCD彩色显示屏GUI库&#xff0c;旨在为用户提供高效、稳定且易于使用的图形用户界面。该…

邮件营销最佳时段:提升邮件打开率与转化率的策略

在如今数字时代&#xff0c;电子邮件营销已成为企业推广及与客户互动的有效途径。但是&#xff0c;一个普遍的现象是&#xff1a;何时发送电子邮件才能更合理&#xff1f;本文将探讨电子邮件营销的出色推送机会&#xff0c;并提供一些有用的提议&#xff0c;以帮助企业更好地规…

OrientDB使用教程:全面了解图数据库

图数据库在当今数据处理领域中扮演着越来越重要的角色&#xff0c;而OrientDB作为一种多模型的数据库&#xff0c;具有图数据库、文档数据库和对象数据库的特性&#xff0c;为应对不同场景提供了灵活的解决方案。本教程将简要介绍OrientDB的使用&#xff0c;包括基本概念、安装…

python subprocess run 和 Popen 的一些使用和注意事项

文章目录 一、run二、Popen NAME subprocess - Subprocesses with accessible I/O streams MODULE REFERENCE https://docs.python.org/3.9/library/subprocess The following documentation is automatically generated from the Python source files. It may be incomplete, …

QGraphicsItem器件移动及旋转相关问题

一、前言 Qt的图形视图框架中&#xff0c;可以使用如下接口设置图元坐标&#xff1a; void QGraphicsItem::setPos(const QPointF &pos)Sets the position of the item to pos, which is in parent coordinates. For items with no parent, pos is in scene coordinates.…

【数据结构】排序之插入排序

排序目录 1.前言2. 排序的概念及其运用2.1 排序的概念2.2 排序的运用2.3 常见的排序算法 3. 插入排序3.1 基本思想3.2 直接插入排序3.2.1 直接插入排序实现3.2.1.1 分析3.2.1.2 代码实现 3.3 希尔排序3.3.1 希尔排序实现3.3.1.1 分析3.3.1.2 代码实现 4. 附代码4.1 sort.h4.2 s…