java线程之用Thread类创建线程的方法

GBase8a-GDCA认证考试-复习参考题 为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。 阅读详情

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载了八次,构造方法如下:

复制代码 代码如下:

public Thread( );
 public Thread(Runnable target);
 public Thread(String name);
 public Thread(Runnable target, String name);
 public Thread(ThreadGroup group, Runnable target);
 public Thread(ThreadGroup group, String name);
 public Thread(ThreadGroup group, Runnable target, String name);
 public Thread(ThreadGroup group, Runnable target, String name, long stackSize);

Runnable target

    实现了Runnable接口的类的实例。要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。

    String name

    线程的名子。这个名子可以在建立Thread实例后通过Thread类的setName方法设置。如果不设置线程的名子,线程就使用默认的线程名:Thread-N,N是线程建立的顺序,是一个不重复的正整数。

    ThreadGroup group

    当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的线程组中。关于线程组的细节将在后面的章节详细讨论。

    long stackSize

    线程栈的大小,这个值一般是CPU页面的整数倍。如x86的页面大小是4KB.在x86平台下,默认的线程栈大小是12KB.

    一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。虽然Thread类的子类可以直接实例化,但在子类中必须要覆盖Thread类的run方法才能真正运行线程的代码。下面的代码给出了一个使用Thread类建立线程的例子:

复制代码 代码如下:

package mythread;

   public class Thread1 extends Thread
   {
       public void run()
      {
           System.out.println(this.getName());
      }
       public static void main(String[] args)
       {
           System.out.println(Thread.currentThread().getName());
           Thread1 thread1 = new Thread1();
           Thread1 thread2 = new Thread1 ();
           thread1.start();
           thread2.start();
      }
  }

上面的代码建立了两个线程:thread1和thread2.上述代码中的005至008行是Thread1类的run方法。当在014和015行调用start方法时,系统会自动调用run方法。在007行使用this.getName()输出了当前线程的名字,由于在建立线程时并未指定线程名,因此,所输出的线程名是系统的默认值,也就是Thread-n的形式。在011行输出了主线程的线程名。

    上面代码的运行结果如下:

复制代码 代码如下:

main
Thread-0
Thread-1

从上面的输出结果可以看出,第一行输出的main是主线程的名子。后面的Thread-1和Thread-2分别是thread1和thread2的输出结果。

    注意:任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。也就是说,多线程程序必须拥有一个以上的线程。

Thread类有一个重载构造方法可以设置线程名。除了使用构造方法在建立线程时设置线程名,还可以使用Thread类的setName方法修改线程名。要想通过Thread类的构造方法来设置线程名,必须在Thread的子类中使用Thread类的public Thread(String name)构造方法,因此,必须在Thread的子类中也添加一个用于传入线程名的构造方法。下面的代码给出了一个设置线程名的例子:

复制代码 代码如下:

package mythread;

  public class Thread2 extends Thread
  {
      private String who;

      public void run()
      {
          System.out.println(who + ":" + this.getName());
      }
      public Thread2(String who)
      {
          super();
          this.who = who;
      }
      public Thread2(String who, String name)
      {
          super(name);
          this.who = who;
      }
      public static void main(String[] args)
      {
          Thread2 thread1 = new Thread2 ("thread1", "MyThread1");
          Thread2 thread2 = new Thread2 ("thread2");
          Thread2 thread3 = new Thread2 ("thread3");
          thread2.setName("MyThread2");
          thread1.start();
          thread2.start();
          thread3.start();
      }

在类中有两个构造方法:

    第011行:public sample2_2(String who)

    这个构造方法有一个参数:who.这个参数用来标识当前建立的线程。在这个构造方法中仍然调用Thread的默认构造方法public Thread( )。

    第016行:public sample2_2(String who, String name)

    这个构造方法中的who和第一个构造方法的who的含义一样,而name参数就是线程的名名。在这个构造方法中调用了Thread类的public Thread(String name)构造方法,也就是第018行的super(name)。

    在main方法中建立了三个线程:thread1、thread2和thread3.其中thread1通过构造方法来设置线程名,thread2通过setName方法来修改线程名,thread3未设置线程名。

    运行结果如下:

复制代码 代码如下:

thread1:MyThread1
thread2:MyThread2
thread3:Thread-2

从上面的输出结果可以看出,thread1和thread2的线程名都已经修改了,而thread3的线程名仍然为默认值:Thread-2.thread3的线程名之所以不是Thread-1,而是Thread-2,这是因为在024行建立thread2时已经将Thread-1占用了,因此,在025行建立thread3时就将thread3的线程名设为Thread-2.然后在026行又将thread2的线程名修改为MyThread2.因此就会得到上面的输出结果。

    注意:在调用start方法前后都可以使用setName设置线程名,但在调用start方法后使用setName修改线程名,会产生不确定性,也就是说可能在run方法执行完后才会执行setName.如果在run方法中要使用线程名,就会出现虽然调用了setName方法,但线程名却未修改的现象。

    Thread类的start方法不能多次调用,如不能调用两次thread1.start()方法。否则会抛出一个IllegalThreadStateException异常。
【ComfyUI专栏】ComfyUI 常用工作流下载与分享网址 首先我们来分享第一个网站,Openart 网站,这个网站同时也能提供比较多的其他类型。但是如果希望下载工作流,我们可以访问到如下的这个站点。作为ComfyUI的学习用户来说,我们通常需要借助他山之石来帮助我们快速成长,因此我们需要找到能够分享和下载的网址。,当前网站是综合性网站,在网站中可以下载各种不同的类型,其中工作流只是可以下载的非常小的部分。这个网站也可以浏览不同的工作流,这个工作流的地址和访问如下的站点。 阅读详情

相关推荐

告别CMake依赖!在Visual Studio 2022中直接配置VTK 9.4开发环境(附完整项目示例)

本文详细介绍了如何在Visual Studio 2022中直接配置VTK 9.4开发环境,无需依赖CMake。通过图文教程和完整项目示例,帮助C++开发者快速集成VTK库,简化开发流程,提升工作效率。特别适合科学可视化任务的开发者。

weixin_26804345的博客 415

初识Thread类与创建多线程的方法

初识Thread类与创建多线程的方法

chenchenchencl的博客 913

怀旧党必备!用iPhone4s重温iOS6的保姆级教程(含游戏资源包)

本文提供了一份详细的iPhone4s降级至iOS6.1.3的保姆级教程,包括设备准备、越狱操作、系统降级及资源优化全流程。通过自制固件和越狱工具,用户可以重温经典的拟物化设计和流畅体验,同时获取经典游戏资源包,打造复古游戏神器。

nft7creator的博客 886

C#多线程(1)

一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进...

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 819

目标检测之Mask R-CNN(Pytorch):小白动手实现项目

目标检测之Mask R-CNN:小白动手实现项目Pytorch引言Mask R-CNN原理简述代码、注释及详细解释 引言 首先声明本项目的运行环境。操作系统为Windows,编写环境为Anaconda3 + Jupyter Notebook。Pytorch版本为 torch 1.7.1+cu110 、torchvision版本为 0.8.2+cu110,cuda版本为cu100,显卡为Nvidia 2060。 我是目标检测领域的小白,刚刚完成了Pytorch的相关入门学习任务,所以我认为学习本篇博客的基础

dzc_go的博客 1万+

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

【Java】多线程(篇一) : 通过Thread类创建线程的方法

【Java】多线程:通过Thread类创建线程的方法 1. 创建一个类, 继承Thread, 重写run方法 用线程来写一个简单的 hello word: 多线程的无限循环 以及调试器 调试器 2. 创建一个类, 实现Runnable , 重写 run 方法

mmmocen的博客 1248

华为OD技术面八股文_C++_02

汇总华为OD面试C++方面计数八股文真题,提供详细解答。

qq_45776114的博客 766

创建线程,Thread类常用方法,线程状态,线程安全问题

认识线程,Thread类常用方法,线程状态,线程安全问题

xaiobit_hl的博客 3125

结构光相移法-多频外差原理与实践

结构光相移法是一种常用的三维形貌测量技术,它通过对投射到目标物体上的结构光进行相位调制和解调,实现对物体表面的三维重建。其中,多频外差原理是结构光相移法的核心原理之一,通过使用不同频率的结构光来实现相位测量,并可以提高测量精度和抗干扰性能。结构光相移法的多频外差原理是一种常用的三维形貌测量技术,它通过使用多个不同频率的结构光进行相位调制和解调,实现对物体表面的三维重建。本文介绍了多频外差原理的原理和实践应用,并提供了相应的Python源代码,希望对读者理解和应用结构光相移法有所帮助。

CodeByte的博客 737

Python之achatbot包语法、参数和实际应用案例

本书是一本PyTorch深度学习实战指南,分为基础(前6章)和进阶(后5章)两大部分。基础部分涵盖张量运算、神经网络、数据预处理及CNN等核心内容;进阶部分则深入图像、文本、音频建模技术,重点解析Transformer架构及大语言模型开发。全书采用"理论+实践"模式,适合从零基础到进阶的PyTorch学习者。

王国平的博客 632

Java多线程:常见的线程的创建方法及Thread类详解

线程是程序的执行流程的最小单元,一个进程(程序的执行实例)可以由一个或多个线程组成,每个线程都有自己的执行路径和执行状态。线程可以并发执行,即多个线程可以同时在不同的处理器核心或计算机上运行,从而提高程序的运行效率。线程与进程的区别在于,进程是操作系统对一个正在运行的程序的抽象,而线程是进程内部的一个执行单位。一个进程可以有多个线程,这些线程共享进程的资源,如内存空间、文件描述符等。线程之间可以通过共享内存的方式进行通信,相比于进程间通信(如管道、消息队列)的开销更小。

luming的博客 1652

【Ubuntu】RK3576 Linux 6.10 Ubuntu 22.04 系统中 HUSB311 Type-C 转 DP 显示输出与 Device/OTG 模式切换配置详解

本文详细介绍了在Rockchip RK3576开发板(Linux Kernel 6.10+Ubuntu 22.04)上配置HUSB311 Type-C控制器的设备树实现方案。主要内容包括:1)硬件连接与模块组成;2)设备树完整配置,涵盖Type-C供电、USB OTG/Host模式、DP显示输出等关键功能;3)软件配置步骤与常见问题排查方法。该方案实现了Type-C接口的DisplayPort AltMode显示输出、USB Device/Host模式自动切换等功能,为嵌入式系统Type-C接口开发提供参考

qq_34478161的博客 808

java 创建线程thread_java线程之用Thread类创建线程的方法

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载了八次,构造方法如下:public Thread( );public Thread(Runnable target);publi...

weixin_42179184的博客 656

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java多线程的创建与Thread类的方法及使用

一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 “同时” 执行着多份代码.举个例子如下场景:一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。如果只有张三一个会计就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,张三又找来两位同事李四、王五一起来帮助他,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。

积跬步以至千里 1009

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java 创建线程的方法 继承Thread类和实现Runnable接口

要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;◆实现Runnable接口,重载Runnable接口中的run()方法。 具体步骤 1、扩展Thread类来创建线程 首先,需要通过创建一个新类来扩展Thread类,这个新类就成为Thread类的子类。接着在该子类中重写Thread类的run()方法,此时方法体内的程序就是将...

绝对秋香 443

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在Java中,创建线程的一种常见方法是通过创建Thread类的子类

在这个示例中,我们创建了一个名为MyThread的类,该类继承了Thread类。然后我们重写了run()方法,这是线程执行的入口点。在main()方法中,我们创建了MyThread类的一个实例,并调用了start()方法来启动线程。当线程启动时,它将自动调用run()方法并在其中执行代码。在Java中,创建线程的一种常见方法是通过创建Thread类的子类。

[Blog][Domain] programb.blog.youkuaiyun.com 533

Java 多线程之线程创建全解析:从 Thread 到 Callable,再谈 Thread 类核心方法

本文系统讲解了Java多线程编程的三种创建方式:继承Thread类、实现Runnable接口和实现Callable接口。Thread类适合简单任务,Runnable支持资源共享,Callable可获取返回值。文章还深入分析了Thread类的核心方法,包括start()与run()的区别、sleep()、join()和yield()等,并提供了典型代码示例。最后总结了不同场景下的线程创建选择建议,为后续学习线程同步和线程池打下基础。

qq_40303030的博客 1367

java创建线程方式一继承Thread类以及run()方法、start()方法、线程名字

package multithreading; /* 如何创建一个线程呢? 创建线程方式一:继承Thread类。 步骤: 1,定义一个类继承Thread类。 2,覆盖Thread类中的run方法。 3,直接创建Thread的子类对象创建线程。 4,调用start方法开启线程并调用线程的任务run方法执行。 可以通过Thread的getName()方法获取线程的名称 Thread-编号(从0开始) ...

weixin_43518097的博客 1235

【Java多线程(1)】创建线程的几种方式和Thread类及其常见方法

在 Java 中的线程(Thread)是由 Java 虚拟机(JVM)来管理和调度的,它们并不直接映射到操作系统的原生线程(OS Thread)。Java 线程是由 JVM 在后台使用一种称为“轻量级进程(Lightweight Process)”的概念来实现的。

StuLearn-LJC的博客 1204

java创建线程的两种方式,以及两中方法的联系与优劣,Thread类的常用方法

目录 了解程序,进程,线程的概念 第一种:继承Thread类: Thread类的常用方法: 第二种:实现Runnable接口: Threa与Runnable之间的关系: 比较创建线程的两种方式: 了解程序,进程,线程的概念 在理解创建线程之前,我们应该了解下面程序,进程和线程的基本概念: 程序:是为完成特定任务,用某种语言编写的一组指令的集合,既**一段静态代码**,可以理解成是存储在硬盘中的代码,没有加载到内存中。 进程:程序一次执行的过程,或是一个正在运行的程序,是动态的。 线程:

HXZ_CREATE的博客 842

Java学习笔记67. 创建多线程的方法 -- 通过继承thread类创建多线程

要想使用多线程,就要首先创建多线程。创建多线程的方法,一种是通过创建thread类的对象来创建多线程,一个是通过runnable接口创建多线程。首先来总结通过创建thread类的对象的方法:class 类名称 extends Thread{ 属性; 方法; 修饰符 run(){ 以线程处理的程序; } }其中,run方法是Thread类的一个方法,定...

MangoMax的博客 1337

Java多线程、使用多线程的优点、线程的创建和使用、Thread类、创建线程的两种方式继承Thread类、实现Runnable接口、Thread类的有关方法、线程的调度、无效的源发行版、线程的分类

程序、进程、线程、单核CPU和多核CPU的理解、并行与并发、比较创建线程的两种方式、继承方式和实现方式的联系与区别继承Thread类1) 定义子类继承Thread类。2) 子类中重写Thread类中的run方法。3) 创建Thread子类对象,即创建了线程对象。4) 调用线程对象start方法:启动线程,调用run方法。方式二:实现Runnable接口1) 定义子类,实现Runnable接口。2) 子类中重写Runnable接口中的run方法。3) 通过Thread类含参构造器创建线程对象。4) 将Runn

Redamancy06的博客 375

java 继承thread_java 创建线程的方法 继承Thread类和实现Runnable接口

要产生一个线程,有两种方法:◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;◆实现Runnable接口,重载Runnable接口中的run()方法。具体步骤1、扩展Thread类来创建线程首先,需要通过创建一个新类来扩展Thread类,这个新类就成为Thread类的子类。接着在该子类中重写Thread类的run()方法,此时方法体内的程序就是将来要在新建线程中...

weixin_32323455的博客 660

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法&&如何查看程序中的线程

使用Thread类创建线程的5中方法 以及 使用打开jconsole.exe来查看程序中的线程

云泽野の编程日记 1788

Java多线程2 线程创建的两种方式与Thread类常用方法

/* 线程的创建方式 一 Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。 Thread类的特性 1,每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常 把run()方法的主体称为线程体 2,通过该Thread对象的start()方法来启动这个线程,而非直接调用run() 3,构造器 *Thread():创建新的Thread对象 *...

wisdomcodeinside的博客 346
上一篇: 代码片段你整理
下一篇: Java线程池使用说明
依栏听风雨
博客等级 码龄15年 24粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值