Java多线程入门到精通学习大全?了解线程的几种创建方式和基本原理、代码示例!(第四篇:线程的创建学习)

news2024/11/20 21:34:06

Java多线程的创建方式有三种:继承Thread类,实现Runnable接口和使用Callable和Future接口。

一、继承Thread类

1 原理:

继承Thread类,重写run()方法,将需要并发执行的代码写在run()方法中,创建Thread类的对象,然后调用start()方法启动线程。

2 代码示例:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Hello World!");
    }
     public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

3 注意事项:

  1. 线程启动的方法是start()而不是run(),直接调用run()方法会在当前线程中执行而不是启动新线程。
  2. 同一线程对象只能启动一次,重复调用start()方法会抛出IllegalThreadStateException异常。
  3. 继承Thread类不便于代码复用,应该优先考虑实现Runnable接口。

二、实现Runnable接口

1 原理:

实现Runnable接口,实现run()方法,将需要并发执行的代码写在run()方法中,创建Thread类的对象,将实现了Runnable接口的对象传递给Thread类的构造方法,然后调用start()方法启动线程。

2 代码示例:

public class MyThread implements Runnable {
    public void run() {
        System.out.println("Hello World!");
    }
     public static void main(String[] args) {
        MyThread thread = new MyThread();
        Thread t = new Thread(thread);
        t.start();
    }
}

3 注意事项:

  1. 实现Runnable接口优于继承Thread类,因为Java是单继承的。
  2. 实现Runnable接口的类可以把任务提交给线程池,实现更好的线程管理。

三、使用Callable和Future接口

1 原理:

使用Callable接口表示需要并发执行的任务,Callable接口中的call()方法可以返回运算结果,使用Future接口来获取任务返回的结果。

2 代码示例:

public class MyCallable implements Callable<Integer> {
    public Integer call() throws Exception {
        return 1 + 1;
    }
     public static void main(String[] args) throws Exception {
        MyCallable callable = new MyCallable();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Integer> future = executor.submit(callable);
        System.out.println(future.get());
        executor.shutdown();
    }
}

3 注意事项:

  1. Callable和Runnable接口的区别在于,Callable接口的call()方法可以返回结果,而Runnable接口的run()方法不能返回结果。
  2. 使用Callable接口需要使用ExecutorService接口来提交任务,并通过Future接口获取任务返回的结果。

四 总结:

Java中创建多线程的方式有三种:继承Thread类、实现Runnable接口和使用Callable和Future接口。推荐使用实现Runnable接口的方式,因为Java是单继承的,如果继承Thread类则无法继承其他类;同时实现Runnable接口的类可以被提交到线程池中执行任务,实现更好的线程管理。在需要获取任务运算结果时,可以使用Callable和Future接口。
在这里插入图片描述

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

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

相关文章

【python学习】基础篇-文件与系统-打开与读取文件、文件操作的常用方法

打开与读取文件 在 Python 中&#xff0c;内置了文件(file) 对象。 在使用文件对象时&#xff0c;首先需要通过内置的 open0 方法创建一个文件对象&#xff0c;然后通过该对象提供的方法进行基本的文件操作。 open() 函数的语法格式如下: file open(filename[,mode[,bufferin…

推荐系统学习之路

基本概念&#xff1a; 一、基本流程 b站王树森老师课程笔记 召回(retrieval&#xff09;&#xff1a;快速从海量数据中取回几千个用户可能感兴趣的物品。 方法&#xff1a; 协同过滤 相似度计算&#xff1a; 余弦&#xff0c; 杰卡德 矩阵分解&#xff1a; 将一个稀疏的用户评…

2022年宜昌市网络搭建与应用竞赛样题(三)

网络搭建与应用竞赛样题&#xff08;三&#xff09; 技能要求 &#xff08;总分1000分&#xff09; 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络搭建及安全部署项目&#xff08;500分&#xff0…

Docker笔记(二)

一、Docker 复杂安装1.1、mysql 主从复制1.2、Redis1.2.1、Redis存储大量数据解决方案1.2.2、Redis 集群搭建1.2.3、数据读写存储1.2.4、容错切换转移1.2.5、主从扩容案例1.2.6、主从缩容案例 二、Dockerfile2.1、是什么&#xff1f;2.2、保留字指令2.3、案例 三、虚悬镜像3.1、…

Jetson Orin 平台MAX9296+森云SG5-IMX490C-GMSL2 RGGB(无ISP)驱动调试

1.前期调试说明 开发套件: AGX Orin 32GB模块 版本: JetPack 5.0.2 使用1台SG5-IMX490C-GMSL2-Hxxx IMX490 RGGB x4相机(无ISP), 通过max9296 GMSL2 LINKA接入到Orin CSI端口4 v4l2-ctl -d /dev/video0 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=5 [ 1282…

Django框架之视图概述和URL配置

概述 视图方法&#xff0c;简称视图&#xff0c;它可以接收一个Web request对象并向客户端返回一个Web response对象。response可以是任何对象&#xff0c;如HTML文档、重定向、404异常、XML文档甚至一张图片。在视图方法中可以进行任意的业务逻辑处理&#xff0c;例如查询数据…

运算符重载(全局函数与类的成员函数分别解析)

运算符重载&#xff08;全局函数&#xff09; 比如说对于小于号和大于号&#xff0c;如果说是内置类型的话&#xff0c;可以直接进行比较&#xff0c;因为内置类型是祖师爷定义的&#xff0c;那祖师爷肯定知道比方说int类型怎么比&#xff0c;double类型怎么比&#xff0c;因为…

STL之search()算法

我们之前介绍的find()算法以及find_if()算法都帮助我们查找判断某一个value是否被包含在序列中&#xff0c;并返回它第一次出现时所处的位置&#xff0c;假如我想找到某一段满足条件的子区间&#xff0c;应该怎么做呢&#xff1f;C标准库又为我们提供了哪些算法呢&#xff1f; …

2023年4月《中国数据库行业分析报告》正式发布(含精彩内容概览)

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…

C语言课设项目-51单片机-红外通信

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一. 什么是红外线 二. 红外线系统的组成 三. 红外发射管 四. 红外遥控器发射 五. 红外线接收 六.数…

还能这么玩?清华给 ChatGPT 做逆向,发现了 ChatGPT 的进化轨迹!

作者 |小戏、Python 立足一个 ChatGPT&#xff0c;现在对大模型的研究简直是百花齐发百家争鸣&#xff0c;用 ChatGPT 做化学实验、给 ChatGPT 做心理测试、诱导 ChatGPT 越狱泄漏隐私、让几个 ChatGPT 形成一个小社会等等不胜枚举。 而最近&#xff0c;清华的研究团队又在大模…

深度学习01-tensorflow开发环境搭建

文章目录 简介运行硬件cuda和cuddntensorflow安装。安装Anaconda创建python环境安装tensorflow-gpupycharm配置配置conda环境配置juypternotebook 安装cuda安装cudnn 简介 TensorFlow是一种端到端开源机器学习平台&#xff0c;它提供了一个全面而灵活的生态系统&#xff0c;包…

unity进阶学习笔记:有限状态机

一般来说&#xff0c;每一个游戏物体会有多种状态&#xff0c;每一个状态会对应一个特定动画。如一个游戏角色可能有静止状态&#xff0c;移动状态&#xff0c;攻击状态。每一个状态里都有对应的动画。如果我们只是简单使用一个个if语句判断玩家进行哪个控制来切换动画会让程序…

一文打尽目标检测NMS(2): 效率提升篇

文章来自于&#xff1a;曲終人不散丶知乎&#xff0c; 连接&#xff1a;https://zhuanlan.zhihu.com/p/157900024&#xff0c; 本文仅用于学术分享&#xff0c;如有侵权&#xff0c;前联系后台做删文处理。 在笔者上一篇文章《一文打尽目标检测NMS——精度提升篇》中&#xff0…

博客系统后端设计(三) - 实现获取博客列表页功能

文章目录 实现获取博客列表页功能1. 约定前后端交互接口2. 实现后端代码3. 实现前端代码4. 测试代码5. 涉及到的两个 Bug 实现获取博客列表页功能 当前的博客列表上的数据都是写死的&#xff0c;符合逻辑的做法是&#xff0c;通过数据库读取数据后显示到页面上。 此处就需要打…

【Linux】2.2 环境基础开发工具使用——vim

文章目录 什么是 vimvim 的基本操作vim 指令集Normal mode 指令集插入模式复制粘贴撤销剪切光标移动删除 last line mode 指令集列出行号跳到文件中的某一行查找字符保存文件 vim 的配置 什么是 vim Linux editor —— vim ——多模式的编辑器每种模式有差异&#xff0c;模式之…

人工智能洗稿-免费自媒体洗稿工具

文字洗稿 文字洗稿是指通过修改、重组、删除、替换等手段对文本进行优化、清理和调整&#xff0c;以达到改善文章质量、增加独特性和提高可读性的目的。文字洗稿是自媒体行业的一个重要需求&#xff0c;尤其是在批量撰写文章或需要大量修改文本的情况下。文字洗稿分为自动洗稿…

记一次springboot项目漏洞挖掘

前言 前段时间的比赛将该cms作为了题目考察&#xff0c;这个cms的洞也被大佬们吃的差不多了&#xff0c;自己也就借此机会来浅浅测试下这个cms残余漏洞&#xff0c;并记录下这一整个流程&#xff0c;谨以此记给小白师傅们分享下思路&#xff0c;有错误的地方还望大佬们请以指正…

云办公时代,企业如何保护数据资产安全?

云办公是一种基于云计算技术的办公方式&#xff0c;它将传统的办公软件和数据存储方式转移到了云端服务器上。用户可以通过互联网访问各种办公应用程序和数据&#xff0c;实现远程协作、移动化办公和信息共享等功能。 常见的云办公应用包括文档处理、电子邮件、日历、在线会议、…

ABAP 锁对象

需求场景 最近收到用户反馈&#xff0c;发现同一个托运单生成了两个不同的服务订单以及根据同一个送货单生成了两个托运单&#xff0c;经过排查&#xff0c;发现原因都是由同样的问题导致的&#xff0c;多窗口或者多用户同时对一条数据操作&#xff0c;就会出现这种现象。这个…