java多线程设计模式详解之一--线程的创建和启动

  java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程。
  
  Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法:
  

  Thread t = new Thread();
  t.start();
  

  start()方法是一个native方法,它将启动一个新线程,并执行run()方法。Thread类默认的run()方法什么也不做就退出了。注意:直接调用run()方法并不会启动一个新线程,它和调用一个普通的java方法没有什么区别。
  
  因此,有两个方法可以实现自己的线程:
  
  方法1:自己的类extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
  

  public class MyThread extends Thread {
  public run() {
  System.out.println("MyThread.run()");
  }
  }
  

  在合适的地方启动线程:new MyThread().start();
  
  方法2:如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口:
  

  public class MyThread extends OtherClass implements Runnable {
  public run() {
  System.out.println("MyThread.run()");
  }
  }
  

  为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

  MyThread myt = new MyThread();
  Thread t = new Thread(myt);
  t.start();
  

  事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
  

  public void run() {
  if (target != null) {
  target.run();
  }
  }
  


  线程还有一些Name, ThreadGroup, isDaemon等设置,由于和线程设计模式关联很少,这里就不多说了。
多线程基础:创建与启动线程,线程的生命周期! Java多线程的引入使得我们能够充分利用现代多核CPU的性能,同时让程序能够同时执行多个任务。在多线程编程中,理解线程的生命周期、线程的创建和启动方式,以及如何正确管理线程的执行,是构建高效多线程程序的基础。Java中的多线程编程为我们提供了强大的并发执行能力,理解线程的生命周期、如何创建和启动线程、以及如何管理线程的状态对于构建高效、稳定的应用程序至关重要。通过继承Thread类或实现Runnable接口,我们可以轻松地创建和启动线程。 阅读详情

相关推荐

从RadixTree到哈希表:深入对比SGLang和vLLM的Prefix Cache实现差异

本文深入对比了SGLang与vLLM在大语言模型推理服务中实现Prefix Cache(前缀缓存)的两种核心方案。SGLang采用基于Radix Tree的RadixAttention,支持任意长度前缀的精确匹配与灵活复用;vLLM则采用基于哈希表的方案,深度集成于PagedAttention,实现简洁但要求块级精确对齐。文章剖析了二者在设计哲学、内存管理、适用场景及集群级优化(如Prefix Cache Aware Routing)上的关键差异,为高性能LLM服务的技术选型提供决策依据。

blockchain9miner的博客 956

JAVA 多线程摘要--线程启动

线程的创建和启动 java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程。    Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thr

菜板NET 974

WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案)

本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。

potato的博客 568

Java 多线程的四种创建方式

多线程的优点: 何时需要多线程: 多线程的创建方式一:继承于Thread 1,创建一个继承于Thread类的子类 2,重写Thread类中的run()方法—将此线程执行的操作声明在run方法中 3,创建Thread类的子类的对象 4,通过此对象调用start()方法 其中start()方法的作用: ①启动当前线程 ②调用当前线程的run方法 注意:对于一个线程来说start()只能start一次,如果让已经start的线程去执行。会报IllegalThreadStateException异常。 示例

架构沉思录的博客 1407

强化学习实战:如何用PPO算法训练一个超级马里奥AI(附完整代码)

本文提供了一份详细的强化学习实战指南,教你如何使用PPO算法训练一个能玩《超级马里奥》的AI智能体。内容涵盖从环境搭建、自定义奖励函数设计到PPO智能体的PyTorch完整实现,并附有可运行的代码,帮助开发者快速上手游戏AI开发。

h6j7k8l9p0的博客 947

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1910

java线程的两种实现方式

方式一:通过继承Thread 类实现 实现步骤: 创建新的类继承Thread类 在新的类中重写run()方法来描述线程的任务信息 创建新类对象调用Thread类中的start()方法来开启线程 示例代码如下: /** * java 线程实现方式一 ,继承Thread 类 */ public class ThreadDemo1 { //java 会把main方法中内容放入主线程中(交给CPU)运行 //当程序运行时会把main方法中的内容交给底层的主线程来执行 pub

浅时光|初如梦 315

ElaticSearchUtil工具类封装

package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad

会飞的狼 6295

Java多线程的创建

ThreadTest1类。ThreadTest2类。ThreadTest3类。MyRunnable类。MyCallable类。

SU_mu147的博客 2162

【VisDrone数据集】YOLOX训练VisDrone数据集步骤与结果

YOLOX训练VisDrone数据集步骤与结果。

Gorgeous_wxd 2234

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3263

【Java】—— 多线程:相关概念、创建和启动线程

Java语言的JVM允许程序运行多个线程,使用类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Thread类的特性每个线程都是通过某个特定Thread对象的run()方法来完成操作的,因此把run()方法体称为线程执行体。通过该Thread对象的start()方法来启动这个线程,而非直接调用run()要想实现多线程,必须在主线程中创建新的线程对象。

weixin_63106307的博客 1406

在 SAP Gateway 主机上把 SAML 2.0 配置为 Service Provider:从架构到落地的完整实战

本文详细介绍了在SAP Gateway主机上配置SAML 2.0作为Service Provider的全流程。从概念梳理到实际操作,涵盖了关键步骤:启用本地SP服务、通过反向代理导出元数据、在IdP侧完成对接、配置信任关系与Artifact绑定、设置NameID身份联合等核心环节。特别强调了HTTP Artifact绑定的背道通信机制和证书配置要点,并针对常见错误提供了排障指引。文章注重实操性,结合SAP官方文档与社区最佳实践,为运维团队提供了一套完整的SAML SSO实施框架。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

Java多线程的创建和启动

导读 闲暇周末,怎能懒惰?乘此风和日丽之日,来死磕一下java多线程的创建和启动 一.继承Thread类和重写run()方法 public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } ...

麦叔 845

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java多线程编程 深入详解

《Java多线程编程 深入详解》读书笔记 第一章 多进程多线程概述 线程概述 进程(PROCESS):CPU的执行路径 多进程:系统中同时运行多个程序 线程(THREAD):运行在进程当中的运行单元 多线程:每个进程里面有多个独立的或者相互有协作关系的运行单元 第二章 多线程详解 线程创建 继承 Thread 类 其中 Thread 实现 Runnable ;符

走在命运的左岸 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java多线程-创建和启动

Java多线程创建 java.lang.Thread – 线程继承Thread类,实现run方法 java.lang.Runnable接口 – 线程实现Runnable接口,实现run方法 Java多线程启动 启动 – 调用start方法,会自动以新进程调用run方法 – 直接调用run方法,将变成串行执行 – 同一个线程,多次start会报错,只执行第一次start方法 – 多个线程启动,...

Torey_Li的博客 896

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java多线程系列详解_01_线程的创建和启动

本文主要讲线程的两种创建方式以及启动线程线程的释义(What)为什么要有线程(Why)线程的创建方式线程的启动 线程的释义(What) 百度百科如下: 为什么要有线程(Why) 在Java中很多文件IO操作和网络IO操作都是比较耗时的,比如下载10个文件到本地,这时一般的程序会一个一个 文件的下载,加入使用多线程操作会将10个文件同时下载,这个时候会节省好多时间. 本文的例子是读取数据库内容并写入本地文件,话不多说,让我们一起看代码吧! 线程的创建方式 未使用多线程之前 /** * @a

Alone5256的博客 312

Java 中实现线程的创建和启动

在Java中,创建线程和启动线程是两个关键步骤。必须调用start()而非直接调用run(),因为start()会触发JVM创建新的调用栈并交由操作系统管理,实现真正的异步执行。直接调用run()仅会在当前线程同步执行方法。start()使线程进入可运行状态,符合线程生命周期规范,并能利用多核CPU实现并行计算。正确区分两者对多线程编程至关重要,只有通过start()才能发挥线程的并发优势。

2301_80215285的博客 1562

java多线程的创建和启动

java读取文件的操作(字符流) 文章目录多线程线程Thread线程的创建和启动线程创建两种方式的区别 多线程 线程 进程是应用程序的执行示例,有独立的内存空间和系统资源。 线程是CPU调度和分派的基本单位,执行运算的最小单位,可以完成独立的顺序控制流程 如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称为是多线程。多个线程交替占用CPU资源,而非真正的并行执行。 多线程的好处 充分的利用CPU的资源,提升代码性能 简化编程模型,更好的软件设计和架构 带来良好的用户体验 Thread ja

qq56hm的博客 411

Java中如何创建多线程

进程和线程的关系 进程是所有线程的集合,每一个线程是进程中的一条执行路径。 什么是进程,什么是线程 进程,每个正在系统上运行的程序都是一个进程。 线程,线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,每个进程包含一到多个线程。 多线程的好处(类比同步跟异步的概念) ☞ 提高执行任务的效率 ☞线程(任务)之间互相不影响,如果其中一个线程挂掉,另一个照常运行 Jav...

C8WATER 2095

java 如何创建100个线程_Java多线程---线程的创建和使用

Java多线程---线程的创建和使用主要内容程序、进程、线程的概念Java中多线程的创建和使用1、继承Thread类与Thread类的主要方法2、实现Runable接口3、线程的调度与设置优先级一、程序、进程、线程的概念1、程序(program):可以理解为一段静态的代码,静态对象。是为了完成特定任务、用某种语言编写的一组指令的集合。2、进程(process):它是内存中的一段独立的空间,可以负责...

weixin_32219363的博客 1981

【多线程系列】线程的创建与启动详解

一、创建线程 下面两种方式相信一定非常的熟悉,这是我们常用的方式,下面就以它开头,对线程的创建和启动做一个详细的分析。也是希望通过分析这个过程来理解多线程。 1、继承Thread的方式创建线程 public class ThreadTest extends Thread { public void run(){ System.out.println("重写run方法"); } public static void main(String[] args) {

王华春_Jason 1248

java多线程 创建方式详解

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(Lightweight Process),但轻量进程更多指内核线程(Kernel-Level Thread),而把用户线程(User-Level Thread)称为线程。线程是独立调度和分派的基本单位。

m0_65724855的博客 722

深度解析多线程的创建方式和正确启动多线程

准确的讲,创建线程只有一种方式那就是构造Thread类,而实现线程的执行单元有两种方式:一是实现Runnable接口的run方法,并把Runnable实例传给Thread类,二是重写Thread的run方法(继承Thread类)其它创建线程的方式也有很多,但都是在代码的写法上的千变万化,本质上还是都基于 Thread 类和 Runnable 类的重写run()方法。方法一:最终调用Runnable实例的run()方法(target.run());方法二:直接将Thread类的里整个 run() 方法重写。

Qynwang的博客 1098

图解多线程设计模式pdf_图解Java多线程设计模式pdf

精选12种与多线程和并发处理相关的设计模式264张图表 + 300段Java示例程序 = 轻松学习多线程编程1.图文并茂 通俗易懂日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与多线程和并发处理相关的12种设计模式。每章附带练习题和答案,自学者也可轻松学习2.专业实用 拓展进阶编写了30...

weixin_39790686的博客 757

Java中创建多线程的4种方式详解

在Java编程中,多线程是一个非常重要的概念,它允许程序同时执行多个任务,从而提高程序的效率和响应能力。以下是Java中创建多线程的四种方式。

weixin_64860388的博客 908
下一篇: java多线程设计模式详解之二--线程同步
caip
博客等级 码龄22年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值