线程基本方法

news2024/11/26 0:35:23

1。设置线程名
    继承Thread类的线程,可以直接使用.setName()方法,设置线程名。也可以使用构造方法,需要注意java默认不继承构造方法,所以需要自己调用下父类的构造方法。

public class Demo {
    public static void main(String[] args) {
        MyThread myThread1=new MyThread("飞机");
        myThread1.start();
        MyThread myThread2=new MyThread();
        myThread2.setName("火箭");
        myThread2.start();
        //当jvm虚拟机启动后,会自动的启动多条线程,其中一条是main主线程
        //主线程的作用是调用main方法,并执行其中的代码,在以前,我们写的所有代码,其实都是运行在main线程中
        Thread thread=Thread.currentThread();
        System.out.println(thread.getName());

        //获取优先级
        System.out.println(myThread1.getPriority());
        //线程的默认优先级都是5,包括main线程
    }
}
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; ++i) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //在不设置线程名的情况下,线程名默认是Thread+线程序号
            System.out.println(getName());
        }
    }

    //构造方法子类默认不继承,所以这里需要通过super关键字调用父类Thread的构造方法,给Thread设置名字
    public MyThread() {
    }

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

 实现runnable接口的线程,可以使用.setName方法。但是不能使用构造方法,因为他不像上面继承Thread类的线程,他没有父类的构造方法可以调用。

public class Mythread implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; ++i) {
            String name = Thread.currentThread().getName();
            System.out.println("你好世界!"+"----"+name);
        }
    }
}
public class Demo {
    public static void main(String[] args) {
        Mythread mythread=new Mythread();

        Thread t1=new Thread(mythread);
        t1.setName("线程1");
        Thread t2=new Thread(mythread);
        t2.setName("线程2");

        t1.start();
        t2.start();
        //获取优先级
        System.out.println(t1.getPriority());
    }
}

2. join方法  当前线程需要等待 调用join方法的线程执行完毕,当前线程才能继续执行

public class Demo {
    public static void main(String[] args) throws InterruptedException {
        MyThread myThread = new MyThread();
        myThread.start();

        // 在默认情况下,当前线程和在当前线程添加的线程会交替执行
        // 使用了join方法后,当前线程会等待myThread执行完毕,后继续执行本线程
        myThread.join();
        for (int i = 0; i < 10; i++) {
            Thread.sleep(1);//模拟主线程执行耗时
            System.out.println(Thread.currentThread().getName());
        }
    }
}
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; ++i) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("自定义线程"+i);
        }
    }
}

执行结果:MyThread执行完后,才执行main线程的输出语句

3。

setDaemon

守护线程:当其他非守护线程执行完毕,守护线程不管是否执行完毕,都会停止。

就像舔狗(守护线程)和女神(非守护线程),如果女神走了,那舔狗啥都不管,也走。

主线程

public class Demo {
    public static void main(String[] args) {
        NvShenThread nvShenThread=new NvShenThread();
        TianGouThread tianGouThread =new TianGouThread();
        //将舔狗线程设置为守护线程 守护线程:当其他非守护线程执行完毕,会自动停止守护线程
        //应用场景:qq聊天和发送文件,聊天框关闭,发送文件也应当停止
        tianGouThread.setDaemon(true);
        nvShenThread.start();
        tianGouThread.start();
    }
}

女神线程(非守护线程)

public class NvShenThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("女神线程执行"+"----"+i);
        }
    }
}

舔狗线程(守护线程)

public class TianGouThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("舔狗线程执行"+"----"+i);
        }
    }
}

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

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

相关文章

如何在手机上打开电脑端本地的网页

目录 一.手机端预览VSCode生成的网页站点二.手机端预览VS2022生成的 WebApi网页站点三.总结 今天遇到了2个小问题&#xff1a;1.想在手机上运行VSCode上写好的网页代码。2.同样在手机上运行VS2022 WebApi生成的网页。查找了一晚上资料&#xff0c;终于动手解决了&#xff0c;记…

线性分类器--分类模型

记录学习 北京邮电大学计算机学院 鲁鹏 为什么从线性分类器开始&#xff1f;  形式简单、易于理解  通过层级结构&#xff08;神经网络&#xff09;或者高维映射&#xff08;支撑向量机&#xff09;可以 形成功能强大的非线性模型 什么是线性分类器&#xff1f; 线性分…

一觉睡到大天亮,dido P1S智能手环体验

智能穿戴设备对于有关注健康的朋友来说&#xff0c;是非常使用的工具&#xff0c;它们可以帮助我们实时监测一些健康数据&#xff0c;最近几年&#xff0c;国产的智能穿戴设备突飞猛进&#xff0c;大幅拉低了价格门槛&#xff0c;而且使用体验也很不错&#xff0c;现在我用的也…

初识Spring (Spring 核心与设计思想)

文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…

CSS3制作3D爱心动画

1、什么是CSS css&#xff0c;即层叠样式表的简称&#xff0c;是一种标记语言&#xff0c;有浏览器解释执行用来使页面变得更美观。 2、选择器 css3中新增了一些选择器&#xff0c;如下&#xff1a; 3、新样式 边框 css3新增了三个边框属性&#xff0c;分别是&#xff1a; bo…

Postman:专业API测试工具,提升Mac用户体验

如果你是一名开发人员或测试工程师&#xff0c;那么你一定知道Postman。这是一个广泛使用的API测试工具&#xff0c;适用于Windows、Mac和Linux系统。今天&#xff0c;我们要重点介绍Postman的Mac版本&#xff0c;以及为什么它是你进行API测试的理想选择。 一、强大的功能和易…

文件夹重命名技巧:如何整理过长且混乱的文件夹名称

当浏览计算机文件夹时&#xff0c;有时候会遇到一些过长且混乱的文件夹名称&#xff0c;给文件夹管理带来不便。倘若手动修改文件夹名称会出现错误的机率过大&#xff0c;且这样操作太耗费时间和精力。有什么方法能够避免手动修改文件夹名称&#xff0c;提升工作效率的方法呢&a…

Java远程连接本地开源分布式搜索引擎ElasticSearch

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch。 什么是elasticsearch&#xff1f;一个开源的分布式搜索引擎&#xff0…

git报错:error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

git报错&#xff1a;error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 如图&#xff1a; error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 send-pack: unexpected disconnect while reading sideband packet fatal: th…

最火前端可视化Web组态软件工具

随着5G、物联网、大数据等技术的高速发展&#xff0c;各领域逐步向数字化、可视化的人工智能&#xff08;AI&#xff09;的方向不断迈进。全球进入工业 4.0 时代&#xff0c;标志着先进的信息技术于制造业紧密结合&#xff0c;将从单纯的生产要素向数据驱动、智能化、高度自动化…

线性分类器---损失函数与优化算法

如何衡量分类器对当前样本的效果好坏&#xff1f; 需要损失函数 什么是损失函数&#xff1f; 损失函数搭建了模型性能与模型参数之间的桥梁&#xff0c;指导 模型参数优化。  损失函数是一个函数&#xff0c;用于度量给定分类器的预测值与真实值 的不一致程度&#xff0c;…

sprintf函数

1.头文件&#xff1a;#include <stdio.h> 2.函数原型&#xff1a;int sprintf ( char * str, const char * format, ... ) 3.函数功能&#xff1a;将数据格式化为字符串&#xff0c;再写入到字符串中 4.参数分析&#xff1a; str&#xff1a;是字符串指针&#xff0c…

【MyBatisPlus】通俗易懂 快速入门 详细教程

目录 学习目标 一、MyBatisPlus简介 1. 入门案例 问题导入 1.1 SpringBoot整合MyBatisPlus入门程序 ①&#xff1a;创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②&#xff1a;选择当前模块需要使用的技术集&#xff08;仅保留JDBC&…

Python---可变和非可变数据类型

在Python中一共有7种数据类型&#xff1a; 数值&#xff08;int整型、float浮点类型&#xff09;、bool类型&#xff08;True和False&#xff09;、字符串类型&#xff08;str&#xff09;、元组&#xff08;tuple 1,2,3&#xff09;、列表&#xff08;list [1, 2, 3]&#xf…

02-鸿蒙学习之4.0todoList练习

02-鸿蒙学习之4.0todoList练习 代码 /*** 1:组件必须使用Component装饰* 2.Entry 装饰哪个组件&#xff0c;哪个组件就呈现在页面上* 3.被Entry 装饰的入口组件。build&#xff08;&#xff09;必须有且仅有一个根 ** 容器 ** 组件* 其他的自定义组件&#xff0c;build() 中…

Vue框架学习笔记——事件处理:v-on指令+methods

文章目录 前文提要事件处理的解析过程&#xff0c;v-on:事件名样例代码如下&#xff1a;效果展示图片&#xff1a;v-on:事件名"响应函数"v-on简写形式响应函数添加响应函数传参占位符"$event"注意事项 前文提要 本人仅做个人学习记录&#xff0c;如有错误…

file_get_contents() 函数详解与使用

概述 在PHP中&#xff0c;file_get_contents() 函数是一个强大的工具&#xff0c;它既可以用于读取本地文件的内容&#xff0c;也可以用于发起 HTTP 请求获取远程资源。本文将详细介绍 file_get_contents() 函数的两种主要用途&#xff0c;并探讨如何充分利用这个函数。 1. 文…

MongoDB安装教程

前言 这里介绍的是使用本地安装的方式&#xff0c;安装MongoDB Mac端 第一种方式是使用手动下载&#xff0c;然后手动安装的方式 这种方式的优点&#xff0c;可以锻炼手动安装的能力&#xff0c;熟悉软件的安装流程。 但是缺点就是&#xff0c;操作比较复杂&#xff0c; 1&am…

五子棋游戏

import pygame #导入pygame模块 pygame.init()#初始化 screen pygame.display.set_mode((750,750))#设置游戏屏幕大小 running True#建立一个事件 while running:#事件运行for event in pygame.event.get():if event.type pygame.QUIT:#当点击事件后退出running False #事…

yolov8-pose姿势估计,站立识别

系列文章目录 基于yolov8-pose的姿势估计模式,实现站姿,坐姿,伏案睡姿识别,姿态动作识别接口逻辑作参考。本文以学习交流,分享,欢迎留言讨论优化。 yoloPose-姿势动作识别 系列文章目录前言一、环境安装二、使用yolov8-pose1.导入模型,预测图像三.姿势动作识别之站立总…