java创建线程的方法

news2024/9/30 21:22:53

 

线程是程序的一种操作单元,在程序中,一个线程和另一个线程是同时存在的。它是一个程序的一部分,但是他又是独立的,它不会影响到另一个线程的执行。但是多个线程同时运行时,会对系统资源造成一定的消耗。 线程之间的竞争是导致程序执行效率低下的主要原因之一。当多个线程同时运行时,其中一个线程执行失败或执行时间过长时,就会阻塞其他所有线程。所以我们需要创建多个线程,来提高程序的运行效率。

  • 一、创建一个新的线程

    创建一个新的线程,是创建多个线程的基础,当我们需要多个线程的时候,就需要使用线程池来管理。 使用 Java提供的 Thread类来创建线程,这里使用的是一个继承 Thread类的java.la ng. Thread类,下面是创建新的线程的代码: 其中 name代表这个线程的名字, static代表这个线程类型为 Long, static修饰符代表这个线程是永久存在的。我们把一个线程命名为 thread. close。 在 Java中创建一个新的线程,可以通过使用 Object类中提供的 Thread类来完成。这个 Object类提供了一个创建 Thread对象和实现了 Thread接口的类。 我们首先把新创建出来的 thread对象实例化,然后通过实现了 Thread接口的类,就可以获得这个新创建出来的 Thread对象了。

    • 1、创建一个 Thread对象

      创建 Thread对象的过程与创建线程的过程是一致的,首先使用 Thread接口中定义的构造函数创建一个对象,然后在实例化这个对象。这个构造函数用来创建一个新的 Thread对象,该对象是一个字符串,它包含了我们想要定义的 Thread类和一些属性。在 Java中,我们可以使用 Java内置的继承方法来创建新的对象,也可以通过实例化现有对象来创建新的对象。 我们可以使用 Thread类中提供的构造函数来创建一个新的线程对象,这里使用了一个构造函数来获取这个线程对象,并实例化它。在方法体中,使用了 thread. value属性来进行值传递,通过这个属性,可以把新创建出来的线程对象实例化。

    • 2、获取这个 Thread对象

      在这个类中, thread对象的值为0,说明这个 Thread对象是一个线程,此时就可以获取到这个 Thread对象。 注意:如果我们需要在同一个线程中执行不同的任务,需要使用线程池来管理多个线程。这时就需要通过以下方式来实现了: 在 Java中,我们使用线程池的时候,需要使用 Thread对象来创建线程。下面是一个实现了 Thread接口的类,在这个类中使用了 Thread接口中的 thread方法来创建线程。在创建线程的时候,使用方法 new Thread ()来初始化 Thread对象。调用方法 new Thread ()之后,会获得一个新的线程对象,并将这个新的线程对象分配给新创建出来的线程。

  • 二、调用已有的线程

    调用已有的线程的方法有两种: 1)。直接调用 Thread类中的 threadLock ()方法; 2)。通过对象的 threadLock属性来实现。 在上面的例子中,使用 ThreadLock ()方法可以调用两个线程:第一个线程创建了一个新的线程,它是由 Thread类中的 thread对象创建的。这种方法效率很高,但是不够灵活,因为 thread对象是一个类,而不是一个对象。

    • 1、第二个线程创建了一个新的线程,它是由 Thread对象中的 ThreadLock属性来创建的。

      使用这种方法,可以实现在不改变对象的类或接口的情况下创建新的线程。这种方法效率很高,因为它是通过调用一个已有的 Thread类中的 ThreadLock属性来创建新的线程。但是,这种方法不够灵活,因为它是通过对象本身来创建新线程,而不是通过线程本身来创建。使用这种方法创建线程有一个缺点:如果该对象没有被调用,那么该线程将不会执行。为了解决这个问题,我们可以这样做:在 Thread类中定义一个继承 Thread. void ()的方法,这个方法用于调用一个已有的 Thread类中的 thread属性,然后在该 thread对象上调用这个已有的 thread对象中的 ThreadLock ()方法。这样就可以保证该线程不会被调用,因为它被调用时已经有了一个已有的 Thread对象。

    • 2、两个线程同时被创建,它们是通过一个线程调用另一个线程来实现的。

      使用线程的方法很简单,但需要注意以下几点: 1)。由于是通过一个线程调用另一个线程,所以线程的创建是被中断的,所以在线程执行之前需要确定好哪个线程是当前线程。 2)。要实现一个线程,必须要有一个参数,这个参数就是线程的名称。如果不知道线程的名称,可以使用 static关键字来定义,其值为 NULL。 3)。通过调用 ThreadLock ()方法来创建新的线程时,应该使用 static关键字来指定 Thread类中哪个对象是当前线程。

  • 三、线程间通信

    线程间通信是指两个或多个线程之间进行信息交换的过程,这是实现线程间通信的关键。在 Java中,有两种实现方式:事件和回调函数。事件方式主要用于接收和发送消息;回调函数则用于接收和发送数据。在 Java中,可以使用 Thread类来实现事件和回调函数,但为了提高效率,建议使用 expiration类。 在上面的例子中,我们创建了一个 Thread类,并且设置了它的 state属性为1。

  • 常用的java创建线程代码:

  • 1. 继承Thread类:
    ```java
    public class MyThread extends Thread {
    @Override
    public void run() {
    // 线程执行的代码
    }
    }
    // 创建线程并启动
    MyThread myThread = new MyThread();
    myThread.start();
    ```
    2. 实现Runnable接口:
    ```java
    public class MyRunnable implements Runnable {
    @Override
    public void run() {
    // 线程执行的代码
    }
    }
    // 创建线程并启动
    MyRunnable myRunnable = new MyRunnable();
    Thread thread = new Thread(myRunnable);
    thread.start();
    ```
    3. 使用匿名内部类:
    ```java
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    // 线程执行的代码
    }
    });
    thread.start();
    ```
    4. 使用Lambda表达式:
    ```java
    Thread thread = new Thread(() -> {
    // 线程执行的代码
    });
    thread.start();
    ```

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

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

相关文章

[Linux] 基础IO

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…

SQL Server用户定义的函数(UDF)使用详解

SQL Server用户定义的函数一、背景知识1.1、用户定义函数的优点1.2、函数类型1.3、指引1.4、函数中的有效语句1.5、架构绑定函数1.6、指定参数二、创建用户定义函数2.1、限制和权限2.2、标量函数示例(标量 UDF)2.3、表值函数示例2.3.1、内联表值函数 &am…

leetcode26.删除数组中的重复项

1.原题目链接:力扣 2.题目: 3. 思路:使用两个指针:src与dst,刚开始均指向起始位置,如果src的值与dst值相同,src,如果src的值与dst的值不相同,dst,src的值赋值给dst,src,即两个指针比较,值不相同…

图像去模糊:MIMO-UNet 模型详解

本内容主要介绍实现图像去模糊的 MIMO-UNet 模型。 论文:Rethinking Coarse-to-Fine Approach in Single Image Deblurring 代码(官方):https://github.com/chosj95/MIMO-UNet 1. 背景 由于深度学习的成功,基于卷…

docker搭建linux网络代理

docker搭建linux网络代理 1.准备 config.yaml 配置文件(含订阅节点、规则,一般机场或者本地配置中含有) 在root下创建文件夹命名为clash。上传配置好的config.yaml至clash文件夹。 2.配置 端口: port: 7890 ; socks-port: 7891 运行局域网…

Python网络爬虫之HTTP原理

写爬虫之前,我们还需要了解一些基础知识,如HTTP原理、网页的基础知识、爬虫的基本原理、Cookies的基本原理等。本文中,我们就对这些基础知识做一个简单的总结。 🌟HTTP 基本原理 在本文中,我们会详细了解 HTTP的基本原…

医学图像分割之MedNeXt

论文:MedNeXt: Transformer-driven Scaling of ConvNets for Medical Image Segmentation ConvNeXt网络是一种借鉴Transformer的思想进行了改进实现的全卷积网络,其通过全卷积网络和逆向残差瓶颈单元的设计,可以实现比较大的空间感受野。本文…

【MySQL】聚合查询

目录 1、前言 2、插入查询结果 3、聚合查询 3.1 聚合函数 3.1.1 count 3.1.2 sum 3.1.3 avg 3.1.4 max 和 min 4、GROUP BY 子句 5、HAVING 关键字 1、前言 前面的内容已经把基础的增删改查介绍的差不多了,也介绍了表的相关约束, 从本期开始…

windows将exe或者bat封装成系统服务进行管理

NSSM介绍 NSSM(the Non-Sucking Service Manager)是Windows环境下一款免安装的服务管理软件,它可以将应用封装成服务,使之像windows服务可以设置自动启动等。并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能…

和利时:自主可控 安全高效

4月13—15日,由易派客电子商务有限公司、中国石油和石油化工设备工业协会、北京长城电子商务有限公司共同主办的2023第二届易派客工业品展览会在苏州国际博览中心成功召开。本次展会以“绿色智造融通赋能”为主题,杭州和利时自动化有限公司(简…

Cesium:Particle Systems粒子系统

官网文档,点击此处查看。 粒子系统简述 粒子系统是一种用于模拟复杂物理效果的图形学技术,它是一系列小图片的集合,当这些小图片被放在一起查看时,会形成一种更为模糊的对象,例如:火苗、烟、天气或者烟花。 粒子系统效果在电影和游中是十分普遍的。例如:飞机失…

Spark 之 解析json的复杂和嵌套数据结构

本文主要使用以下几种方法: 1,get_json_object():从一个json 字符串中根据指定的json 路径抽取一个json 对象 2,from_json():从一个json 字符串中按照指定的schema格式抽取出来作为DataFrame的列 3,to_j…

【洋桃一号板】STM32F103CBT6标准库函数驱动TM1640点亮数码管

一、今天介绍如何使用STM32F103CBT6驱动TM1640点亮数码管,硬件用的洋桃开发板,点亮后效果如下,六个数码管依次显示0.1.2.3.4.5.6.7 硬件原理图如下,只用到了单片机的两个IO口即可实现上图的效果,该开发板上用的是PA11…

chapter-3 -数据库数据模型

以下内容来源于MOOC学习—原课程请见:数据库原理与应用 考研复习 概述 关系及关系模式 笛卡尔积 定义在一组域上的有序对的集合, 域是一组具有相同类型的集合,比如自然数,长度小于n的字符串结合等【比如int age】 从n个域的每…

Linux工具make与makefile

Linux项目自动化构建工具-make/Makefile 目录Linux项目自动化构建工具-make/Makefile引言1、make && makefile2、make执行步骤2.1 依赖关系2.2 依赖方法3、项目清理4、伪目标 .PHONY5、文件的三个时间6、make的工作原理7、Linux下的第一个小程序认识缓冲区进度条①函数…

T5模型简单介绍

目录 一、概要 二、深入扩展 2.1 两个要素 2.2 预训练方法 一、概要 谷歌公司的研究人员提出的 T5(Text-to-Text Transfer Transformer,有5个T开头的单词,所以叫做T5)模型采用了一种与前述模型截然不同的策略:将不…

RUAS论文阅读笔记

这是CVPR2021的一篇暗光增强的论文 Retinex增强和去噪部分 第一部分的核心公式是一种retinex公式(用于暗图增强的retinex公式有几种类型,虽然本质一样但是对于各个分量的定义不一样):yx⊗tyx\otimes tyx⊗t,其中x是正…

Trie|并查集|堆|

目录 初始化 插入 查询 合并集合 连通块中点的数量 堆排序 模拟堆 Trie树是用来快速存储和查找字符串集合的数据结构 #include<iostream> using namespace std; const int N 100010; int son[N][26];//本题为小写因为字母&#xff0c;每个节点最多有26个子节点…

JUC编程之——synchronized的底层实现与分析

1 synchronized关键字 synchronized 是 Java 中的关键字&#xff0c;是一种同步锁(也是一种悲观锁)。它修饰的对象有以下几种&#xff1a; 作用于实例方法&#xff0c;当前实例加锁&#xff0c;进入同步代码前要获得当前实例的锁——对象锁&#xff1b;作用于代码块&#xff…

水文水利数据对接详解

数据对接 水雨情监测及视频监控系统需要与什么平台进行对接&#xff1f; 答&#xff1a;水雨情监测及视频监控系统由省统一接收的方式&#xff0c;数据接收中心设在***水利云。 2.水雨情数据接收中心有哪些组成部分&#xff1f; 答&#xff1a;水雨情数据接收中心主要由硬件…