JAVA多线程实现

news2025/1/19 10:35:35

一、方法总结


  • Thread类的常用方法

void setName(String name)//将此线程的名称更改为name
String getName()//如果不设置名称,则线程默认名称为Thread-0或Thread-1或…就是Thread -? 
String Thread.currentThread().getName()//获得当前线程名称 
Thread(Runnable target,String name)//把MyRunnable对象作为构造方法的参数时,给线程起名字

 

  •  线程优先级

 注意:线程默认的优先级是5;

  • 1.6 线程控制

  • 1.7线程的生命周期 

二、代码演示:

1、继承Thread实现多线程

MyThread.java

//1、定义一个MyThread类继承Thread类
//2、在MyThread类中重写run()方法
//3、创建MyThread对象
//4、创建线程
public class MyThread extends Thread{

    public MyThread(){};

    public MyThread(String name){
        super(name);
    }

    public void run(){
        for(int i=0;i<100;i++)
            System.out.println(getName()+": "+i);
    }
}

MyThreadDemo.java

public class MyThreadDemo {
    public static void main(String[] args) {
        MyThread my1 = new MyThread("高铁");//带参构造设置线程的名称
        MyThread my2 = new MyThread("飞机");
        MyThread my3 = new MyThread("汽车");

        //my1.run();
       // my2.run();
        //运行可知run()方法并没有启动线程
        //void start()导致线程开始执行;java虚拟机调用此线程的run()方法

        //my1.setName("线程1");//设置线程名称
        //my2.setName("线程2");


//        System.out.println(my1.getPriority());//获取优先级
//        System.out.println(my2.getPriority());
//        System.out.println(my3.getPriority());

        //设置优先级
        //优先级范围,最高10,最低1,默认5
        my1.setPriority(5);
        my2.setPriority(10);
        my3.setPriority(1);

        my1.start();

        //my1执行结束才执行其他的线程
        try {
            my1.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        Thread.currentThread().setName("主线程");//设置主线程

        //void setDaemon()设置守护线程,当运行的线程都为守护线程时,java虚拟机将退出
        my2.setDaemon(true);//设置守护线程
        my3.setDaemon(true);

        my2.start();
        my3.start();

        for(int i=0;i<10;i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }

    }
}

 2、实现Runnable接口实现多线程

首先创建MyThread对象,再创建Thread对象,把MyRunnable对象作为构造方法的参数

MyRunnable.java

public class MyRunnable implements Runnable{
    public void run() {
        for(int i=0;i<100;i++)
            System.out.println(Thread.currentThread().getName()+":"+i);
    }
}

class Main {
    public static void main(String[] args) {
        //创建MyThread对象
        MyRunnable my = new MyRunnable();
        //创建Thread对象,把MyRunnable对象作为构造方法的参数
        //Thread(Runnable target)
        Thread t1 = new Thread(my);
        Thread t2 = new Thread(my);
        //给线程起名字
        //Thread(Runnable target,String name)
        Thread t3 = new Thread(my,"高铁");

        t1.start();
        t2.start();
        t3.start();
    }
}

 我们一般使用Runnable实现多线程,因为继承Thread开销更大;但是使用Thread更简单。

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

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

相关文章

C++常见的内存错误和解决策略

目录 1.未初始化指针 (Uninitialized Pointer) 2.内存分配未成功却使用了它 3.野指针 (Dangling Pointer) 4.内存泄漏 (Memory Leak) 5.重复释放内存 (Double Free) 6.内存越界访问 (Buffer Overflow) 7.错误的数组删除方式 (Mismatched Delete) 8.栈内存溢出 (Stack O…

24/10/14 算法笔记 循环神经网络RNN

RNN: 一种专门用于处理序列数据的神经网络&#xff0c;它能够捕捉时间序列中的动态特征。RNN的核心特点是其循环连接&#xff0c;这允许网络在不同时间步之间传递信息&#xff0c;从而实现对序列数据的记忆和处理能力。 应用的场景&#xff1a; 自然语言处理&#xff08;NLP&…

这款懂人情世故的大模型强得可怕!

这款孵化于首期书生大模型实战营&#xff0c;基于 InternLM2 开发的项目——天机&#xff0c;更懂人情世故的大模型&#xff0c;这 2 天在社区可谓有点火&#xff01;相关内容在小红书上至少收获了六千多点赞与收藏 ! 你是否还在苦苦挣扎于各种应酬&#xff0c;四处寻找“高情商…

MySQL-04.DDL-数据库操作

一.数据库的操作 DDL(data definition language)&#xff1a;数据定义语言&#xff0c;用来定义数据库对象(数据库、表) DDL分为两类&#xff1a;1.数据库的DDL语句&#xff0c;主要是针对数据库的定义&#xff0c;增加&#xff0c;删除&#xff0c;使用 2.表结构的DDL语句&…

大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

TuyaOS开发学习笔记(4)——BLE开发搭建环境、编译烧写(NRF52832)

一、搭建环境 1.1 官方资料 TuyaOS 1.2 安装Visual Studio Code 官网下载&#xff1a;https://code.visualstudio.com 百度网盘&#xff1a;https://pan.baidu.com/s/1R62HT0PVmVzMwOXtCmIQwA 提取码&#xff1a;g9fb 1.3 安装Tuya Wind IDE 启动 Visual Studio Code 后&am…

windows10 输入法突然变成繁体字。

1.在任务栏的输入法上切换到设置页面 2. 进入语言选项 3.浮动在桌面上&#xff1f; 4. 点击繁体或简体切换。

IWO-Kmeans聚类 | MATLAB实现IWO-Kmeans侵入性杂草优化K均值聚类算法

智能优化 | MATLAB实现IWO-Kmeans侵入性杂草优化K均值聚类算法 目录 智能优化 | MATLAB实现IWO-Kmeans侵入性杂草优化K均值聚类算法效果一览基本介绍模型描述程序设计参考资料效果一览 基本介绍 侵入性杂草优化 (IWO) 聚类, 与 K-means 和 GMM 高斯混合模型的比较。 入侵杂草优…

jupyter notebook显示左侧内容方法(版本7也可以用)

1 安装 Nbextensions pip install jupyter_contrib_nbextensions如果安装不成功&#xff0c; jupyter安装Nbextensions后不出现Nbextensions选项 就使用以下语句 conda install -c conda-forge jupyter_contrib_nbextensions然后设置下 jupyter contrib nbextension insta…

kali在git外网的代理

如果发现用git无法直接连接到某些外网项目。可以配置一下代理。 vi /etc/proxychains4.conf 主机可以开一下机场代理&#xff0c;查一下主机的地址和代理所开的端口&#xff0c;我这里是7890 写上代码&#xff1a; socks5 <your ip> <your port> 写上之后wq保…

java内存管理

Java内存管理主要涉及Java虚拟机&#xff08;JVM&#xff09;对内存的分配与回收过程。这一过程确保了Java程序在运行时能够有效地使用内存资源&#xff0c;同时避免了手动管理内存所带来的复杂性和潜在错误。 内存分配&#xff1a; 堆&#xff08;Heap&#xff09;&#xff1a…

【C++】拆分详解 - list

文章目录 一、list的介绍二、list的使用1. 构造2. 迭代器3. 增 删 查 改4. list 迭代器失效问题5. list 排序问题 三、list的模拟实现0. 整体框架1. 迭代器类1.1 operator->1.2 临时对象1.3 const_iterator 2. list类2.1 begin / end2.2 构造 / 析构 / 拷贝构造 / 赋值重载2…

谷歌浏览器如何防范恶意网站和广告

在日常使用互联网时&#xff0c;我们经常会遇到一些恶意网站或广告&#xff0c;这些不仅会影响我们的浏览体验&#xff0c;还可能对我们的设备安全造成威胁。为了帮助大家更好地防范这些问题&#xff0c;本文将详细介绍如何在谷歌浏览器中采取有效的措施来防范恶意网站和广告。…

Grafana+ Node+ Prometheus对服务器进行性能监控

目录 一、Grafana 1.把Grafana压缩文件上传到Linux服务器 2.安装服务 3.启动服务 4.访问 二、Node 1.上传node_exporter-1.5.0.linux-amd64.tar到服务器 2.解压 3.启动服务 三、Prometheus 1.上传prometheus-2.43.0.linux-amd64.tar到服务器 2.解压 3.进入prometh…

【Linux】ComfyUI和SD WebUI之PYTHON环境共享,模型共享,LORA等公共资源共享。最大限度节约空间

需求 一般玩AI绘图都会装ComfyUI和SD WebUI。而且这俩的模型、lora等都是一致的。为了避免空间的浪费&#xff0c;一般会采用共享数据的方式。而且共享的数据可以任意指定分区&#xff0c;这让挂载NAS共享空间成为可能&#xff0c;实现多绘画机ComfyUI和SD WebUI共享资源。 实…

SpringCloud学习记录|day4

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 网关 微服务下&#xff0c;好多不同地址和端口&#xff0c;而前端只知道8080&#xff0c;这怎么解决&…

不起眼的错误参数导致remote-debugging-port不生效

引言 背景 由于有一些小需求需要控制浏览器批量执行请求&#xff0c;最简单的方案是使用 DrissionPage 来实现&#xff0c;遂有了下面的问题。 问题 通过命令行传入 remote-debugging-port9111 参数&#xff0c;但是调试了一天&#xff0c;一直不生效&#xff0c;各种方法都…

【数据结构与算法】线性表链式存储结构

线性表链式存储结构 文章目录 链式存储结构*头结点和头指针一.线性链表&#xff08;单链表&#xff09;1.1定义1.2初始化1.2.1带头结点的初始化1.2.2不带头结点的初始化 1.3插入1.3.1按位序插入1.3.2指定结点的后插入操作1.3.3指定结点的前插入操作 1.4删除1.4.1按位序删除1.4.…

小猿口算安卓端安装包PK一题秒过关。。。

大家好&#xff0c;我是小黄。 近段时间&#xff0c;越来越多的同学都想去小猿口算里面虐小学生&#xff0c;但是发现越来越多的计算机学生带着科技与他们进行对抗&#xff0c;这样非计算机专业的大学生们​苦不堪言。 现在&#xff0c;非计算机大学生们翻身的机会来了&#…

二叉平衡树(AVL树)Java语言实现

一、二叉平衡树 上一章所示的同一组元素按照不同顺序插入到二叉排序树中可能会产生两种形状不同的二叉排序树。 当出现右边的情况时&#xff0c;树的高度过高&#xff0c;如果要查找值为“70”的节点需要查找7次&#xff0c;其查找次数已经接近于链表了&#xff0c;这样会导致…