java多线程的创建

LVGL配置文件lv_conf.h详解 lv_conf.h是一个用户级别的文件,它不属于内核的部分,因此,在不同的工程中,该文件有可能存在差异。lv_conf.h文件具有两大功能:(1)配置功能:内存、屏幕刷新周期、输入设备的读取周期,等等;(2)裁剪功能:使能失能某些功能,有效地优化Flash的分配。 阅读详情

说多线程之前先说一下线程与进程的区别吧

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。(如图这就是进程,以及他们所占的内存空间)
在这里插入图片描述

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。 (拿我们平时所用360举例子,他们的功能是可以同时进行的)
在这里插入图片描述

创建线程之前先说一下内存图解吧
在这里插入图片描述
这里是第一种创建线程的图解,在main方法中创建Thread子类的对象,然后在栈内存进行压栈,开启了主线程,堆内存中创建出了新对象的内存空间,此时需要注意用start()方法开启新线程(在run()方法中新线程任务为for循环),此时run()方法重新开辟栈内存空间进行压栈,新线程创建成功。

下面说一下直接调用run()方法会出现什么现象:

在这里插入图片描述
直接调用run()方法,不会开启新线程,二是会在main方法(主线程)压栈之后,run()也会跟着进行压栈,没有开辟新的栈内存,此时还是单线程。

下面来说如何创建线程

  • 第一种:继承Thread方法。在Thread的子类中重写run方法,run方法中写需要开启的新线程。(本文的新线程的任务都是for循环打印)
package xiancheng;

public class DemoThread {
   public static void main(String[] args) {

       MyThread mt = new MyThread();

       mt.start();

       for(int i=0;i<5;i++)
       {
           System.out.println("main"+i);
       }
   }
}
package xiancheng;

public class MyThread extends Thread{

        //2.在Thread类的子类中重写Thread类中的run方法,设置线程任务
        @Override
        public void run() {
            for (int i = 0; i <5  ; i++) {
                System.out.println("run:"+i);
            }
        }
    }

结果:

由图可见,main线程与新线程任务,两个一起抢夺cpu的执行权限,所以他们的运行结果没有规律而言,就出现了随机打印的效果。

  • 第二种:通过实现Runnable接口实现类来创建新线程
package Thread_Runnable;

/**
* 创建多线程的第二种方式:
* 1.创建Runnable的实现类
* 2.在实现中重写Runnable中抽象方法 run()
* 3.创建Runnable接口实现类的对象
* 4.创建Thread类对象,在其构造方法中传入Runnable接口实现类的对象
* 5.调用Thread方法的start方法开启新线程执行run()方法
*/
public class DemoRunnable {
   public static void main(String[] args) {

       RunnableImpl runnable = new RunnableImpl();
       Thread t = new Thread(runnable);

       t.start();
       for (int i = 0; i <5 ; i++) {
           System.out.println(Thread.currentThread().getName()+"----"+i);
       }

   }
}
package Thread_Runnable;

/**
 * 主线程
 */
public class RunnableImpl implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i <5 ; i++) {
            System.out.println(Thread.currentThread().getName()+"----"+i);
        }


    }



}

结果:
在这里插入图片描述
这次的main方法比较给力,运行了好多次,依然是main方法先执行,不过读者们别误导,这个也是会随机打印结果的,新线程依旧会与main线程(主线程)去争夺cpu的执行权限。

  • 第三种:匿名内部类实现线程创建,使用匿名内部类方式实现Runnable接口,重写Runnable中的run方法。()
package Thread_NoNameInClass;

public class DemoNoNameInClass {

   public static void main(String[] args) {

       //线程的父类是Thread
       new Thread(){

           @Override
           public void run() {
               //设置线程任务
               for (int i = 0; i <5 ; i++) {
                   System.out.println(Thread.currentThread().getName()+"---"+i);

               }
           }
           //Thread子类对象需要调用Start方法开启线程
       }.start();

       //线程的接口Runnable  多态
       Runnable r = new Runnable(){
           //重写run方法,设置线程任务
           @Override
           public void run() {
               for (int i = 0; i <5 ; i++) {
                   System.out.println(Thread.currentThread().getName()+"---"+i);

               }

           }
       };
       //Thread类对象,传入实现类的参数,调用start开启线程
       new Thread(r).start();

   }
}

结果:
在这里插入图片描述
大家可以看到两个线程又出现了随机打印,这也是两个线程在争夺cpu的执行权限。

PS:三个测试代码中出现的不熟悉的方法均可在API文档中找到
在这里插入图片描述
在这里插入图片描述

(引用或转载请标明出处。谢谢。)

数理金融学笔记 Chap2 二叉树模型Binomial 2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model 阅读详情

相关推荐

从驱动编译到数据传输:RK3588与FPGA的PCIe通信实战解析

本文详细解析了RK3588与FPGA通过PCIe通信的实战过程,涵盖驱动编译、数据传输及性能优化等关键步骤。通过XDMA驱动实现高效DMA传输,适用于视频处理、数据采集等高性能场景,帮助开发者快速掌握嵌入式系统中的PCIe通信技术。

weixin_29214691的博客 524

【Java】创建多线程的四种方式

每个线程都有一定的优先级,同优先级线程组成先进先出队列(先到先服务),使用分时调度策略。优先级高的线程采用抢占式策略,获得较多的执行机会。每个线程默认的优先级都与创建它的父线程具有相同的优先级。当多个线程同时操作同一个共享数据时,就会出现线程的安全问题。

酷奇的博客 3553

Windows系统离线搭建PyTorch深度学习环境全攻略(CUDA+cudnn实战)

本文提供了一份在Windows系统下离线搭建PyTorch深度学习环境的完整实战指南。文章详细讲解了如何在没有网络连接的情况下,正确安装和配置CUDA、cudnn以及PyTorch,并构建独立的Python虚拟环境。重点强调了版本依赖关系的重要性,并提供了从驱动准备到环境验证的每一步操作,旨在帮助用户高效、稳定地部署可复用的GPU深度学习开发环境。

table的专栏 579

java创建多线程的七种方式

通过自定义一个类(这里起名为:MyThread),继承Thread类,重写run方法,最后在main方法中new出MyThread实例,调用这个实例的继承的Thread类的start方法创建一个线程。工厂模式,将创建产品实例的权利移交工厂,我们不再通过new来创建我们所需的对象,而是通过工厂来获取我们需要的产品。降低了产品使用者与使用者之间的耦合关系;在Java中,线程池的本体叫ThreadPoolExecutor,他的构造方法写起来十分麻烦,为了简化构造方法,标准库就提供了一系列工厂方法,简化使用;

小杨的博客 2653

大模型-CLIP 详细介绍

最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。

晓的博客 9719

OpenGL 进阶系列10 - 光线跟踪实现简介(Ray Tracing)

OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。

GPU全栈博主 1534

Java多线程之四种方法创建线程

创建多线程常用的方法有四种,继承Thread、实现Runnable接口、使用Callable和FutureTask和线程池

liu320yj的博客 5052

企业第三方应用开发概述_测试第三方应用对接企业_以及如何使用流程_Demo演示---企业微信开发002

那么第三方公司开发了应用,做为服务提供商,如果,一个企业想使用这个应用,我开发的这个应用的话,那么。其实就是给我们的应用,安装一个,使用他的企业,分配一共企业 允许这个企业使用我们的应用的功能,可以看到其实就是多了运营规范,因为,第三方应用,其实就相当于,是第三方公司开发的,程序,首先来看一下。然后再来看,这里我们选择这个公司,其实可以,选择到具体的,部门,或者是。然后我们使用一个企业的管理员账号进行,扫码,来授权,这个应用,可以。其实就是指定,我这个企业中,哪个部门,或者哪些员工,可以使用。

添柴程序猿的专栏 413

java中创建多线程的4种方式

在 Java 编程中,多线程是一项非常重要的技术,它能够充分利用计算机的多核处理器资源,提高程序的执行效率和响应性。本文将详细介绍 Java 中创建多线程的四种方式,包括继承 Thread 类、实现 Runnable 接口、实现 Callable 接口以及使用线程池,并对每种方式的原理、代码示例和适用场景进行深入剖析。

天冬忘忧的博客 2634

【YOLO26保姆级零踩坑教程】环境搭建+五大任务快速入门,一行代码实现检测/分割/姿态/OBB/分类(Win+Linux全适配)

YOLO26环境搭建与实战指南:零踩坑全适配 本文是YOLO26全栈技术专栏的入门篇,提供Windows/Linux双系统的纯实战环境搭建指南,主打零踩坑、全适配。YOLO26基于Ultralytics框架优化,无需编译源码或手动下载权重,原生支持多任务推理。 环境配置关键点: 必须安装Ultralytics 8.4.0及以上版本 支持CPU/GPU环境,推荐Python 3.8-3.11 提供清华源配置解决下载慢问题 安装步骤: CPU版:一键安装Ultralytics和OpenCV GPU版:匹配CUD

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 774

基于Simulink的单级式光伏并网系统MPPT控制仿真

本文基于Simulink平台,详细介绍了单级式光伏并网系统的MPPT控制仿真实现。主要内容包括:1)阐述MPPT作为光伏系统"智能大脑"的核心作用;2)解析单级式系统架构及扰动观察法(P&O)算法原理;3)以10kW户用系统为例,分步骤演示建模过程,包括光伏阵列搭建、P&O控制器实现(含MATLAB代码)、并网控制设计等;4)通过仿真验证系统在光照突变下的动态响应性能,MPPT效率达98.3%。文章还提出了变步长P&O等优化方向,为光伏系统仿真与控制提供实用指导。

xiaoheshang_123的博客 111

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

线程池(ThreadPool)是一种基于池化思想管理和使用线程的机制:它是将多个线程预先存储在一个“池子”内,当有任务出现时可以避免重新创建和销毁线程所带来性能开销,只需要从“池子”内取出相应的线程执行对应的任务即可具体可以看看这篇。线程:进程中最小的执行单元,作用是负责当前进程中程序的运行。一个进程中至少有一个线程,一个进程还可以有多个线程,这样的应用程序就称之为多线程程序。下面介绍下创建多线程的几种方式。进程:在内存中执行的应用程序。

weixin_45797022的博客 1637

把外部系统一键装进 SAP Build Work Zone:从零开始创建 HTML5 URL App

HTML5 URL App 是一种轻量级解决方案,可将外部网页或系统入口快速集成到SAP企业门户中。开发者只需在manifest.json中配置目标URL、导航模式等参数,无需开发完整前端应用。该方案利用SAP BTP的HTML5 Application Repository集中存储静态资源,通过HTML5 Apps Content Provider将应用暴露给子账号,最终在SAP Build Work Zone中以Fiori磁贴形式呈现。文章详细介绍了manifest.json的关键配置、三种基础设施组件

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

Java之多线程创建

Java多线程归纳前言传统的线程创建继承Thread类实现Runnable接口两者的共同点两者差别JDK 1.5开始出现的线程创建 前言 进程是资源分配的最小单位,而线程是执行任务的最小的单位。进程里的线程可以共享该进程拥有的资源,而进程之间不可以,进程奔溃了,在保护模式下,不会影响其他进程,而线程一旦出问题了,该进程也要GG思密达。总而言之,创建一个线程比创建一个进程要省事得多儿,这也是当今为...

legendaryhaha的博客 3819

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

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

Java中如何创建多线程

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

C8WATER 2095

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java多线程的创建

第一种方式: 创建多线程程序的第一种方式:创建Thread类的子类;java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类。 实现步骤: 1.创建一个Thread类的子类 2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?) 3.创建Thread类的子类对...

qq_39182939的博客 1254

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java创建多线程的四种方式及其区别

java创建多线程有如下四种方式: 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 使用线程池创建(使用java.util.concurrent.Executor接口) 下面分别介绍这四种创建多线程的方式 1. ----------------------继承Thread类创建线程------------------------...

baihualindesu的博客 1万+

java 多线程创建

java多线程创建有三种方法 1.继承 2.接口 3.匿名内部类 来说说两种主要的创建方法 一.继承 创建一个类继承Thread,用来开启一个线程 package textthread; public class thread extends Thread { public void run() { for (int j = 0; j < 30; j++) { System.ou...

weixin_44714808的博客 220

Java多线程创建方式全解

在Java编程中,多线程是一个重要的概念,它能让程序同时执行多个任务,提高程序的效率和响应能力。以下将详细介绍Java中创建多线程的四种方式。 创建并启动线程 在主程序中创建线程对象,并调用方法来启动线程。方法会自动调用线程对象的方法,使得线程开始执行。例如: (二)特点 这种方式简单直接,符合面向对象的编程思想。但是,由于Java是单继承的,如果一个类已经继承了其他类,就无法再继承类来创建线程。 创建并启动线程 首先创建实现了接口的类的对象,然后将这个对象作为参数传递给类的构造函数来创建线程对象,

qq_68076599的博客 735

java多线程 创建方式详解

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

m0_65724855的博客 722

【Java】详解多线程的概述及三种创建方法

详解单线程、多线程的定义和意义及对多线程的三种创建方法(1).继承Thread类.(2).实现Runnable接口.(3)实现Callable接口以及三种方法的对比分析

2301_80760873的博客 2628

【Java多线程】:理解线程创建、特性及后台进程

本篇主要是了解进程与线程,能够说出两者区别,并且掌握 创建多线程的 3 种方式,能够正确使用 Thread 类、Runnable 接口、Callable 接口实现多线程,并且了解 3 种创建多线程方式的区别。其次还会熟悉后台线程的使用,能够理解后台线程用于做什么

island1314的博客 2544

java 如何创建100个线程_java创建多线程

Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。为什么Java要提供两种方...

weixin_42380646的博客 1844

java创建多线程的四种方式

java多线程的创建方式是面试经常会被问到的一个问题,因此在这里我对java创建多线程的四种方式做一个简单的归纳与总结,便于复习。 一、继承Thread类创建多线程 ① 创建一个继承于Thread类的子类。 ② 重写Thread类中的run()方法,在run()方法中实现线程需要完成的功能。 ③ 创建Thread类的子类的对象,并调用这个对象的start()方法,调用start()后会自动启动当前线程,并调用当前线程的run()方法。 ...

weixin_48016395的博客 4957

JAVA中创建多线程方法

JAVA中创建多线程主要有以下三种方式: 方式一:继承Thread类,重写run()方法 /** * 模拟龟兔赛跑 */ public class Rabbit extends Thread{ @Override public void run() { for(int i=0;i<100;++i) { System.out....

SEUER123的博客 691

Java多线程的四种创建方式

分享了Java多线程的四种创建方式

xieyichun_的博客 1183
上一篇: 反射(框架的灵魂)
下一篇: 内部类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值