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…

什么是reactor模式

Reactor模式是一种事件驱动的设计模式&#xff0c;主要用于处理高并发的I/O操作。在该模式中&#xff0c;一个中心的“反应器”&#xff08;Reactor&#xff09;对象负责监听和分发来自多个客户端的事件请求到相应的处理器&#xff08;Handler&#xff09;。 以下是在Reactor模…

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

循环冗余效验码的计算方法 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; 系…

openpose+smplx

boss不知道从哪淘换来的pose_iter_440000.caffemodel和basicModel_f_lbs_10_207_0_v1.0.0.pkl让我搞2d图像3d蒙皮&#xff0c;人都麻了&#xff0c;最后还是从头过了一下openpose和smplx。这里记录一下 openpose 这个是用来得到骨架坐标的&#xff0c;可以理解为(x,y,置信度)…

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

摘要 克魔助手是一款功能丰富的手机助手软件&#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;以帮助企业更好地规…

Leetcode 2971. Find Polygon With the Largest Perimeter

Leetcode 2971. Find Polygon With the Largest Perimeter 1. 解题思路2. 代码实现 题目链接&#xff1a;2971. Find Polygon With the Largest Perimeter 1. 解题思路 这道题目算是这次双周赛最简单的一道题目了&#xff0c;只要先对所有的边进行排序之后使用贪婪算法考察每…

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

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