【Java寒假打卡】Java基础-多线程

news2025/1/19 12:48:27

【Java寒假打卡】Java基础-多线程

    • 概述
    • 读线程实现方式-继承Thread
    • 多线程实现方式-Callable
    • 三种实现方式的对比
    • Thread方法
    • 守护线程
    • 线程的优先级

概述

  • 并发和并行
    在这里插入图片描述

  • 进程和线程
    在这里插入图片描述

读线程实现方式-继承Thread

在这里插入图片描述

  • 继承Thread类进行实现

在这里插入图片描述

package com.hfut.edu.test11;

public class MyThread extends Thread{

    // 重写run方法
    @Override
    public void run() {
        super.run();

        for (int i = 0; i < 100; i++) {
            System.out.println("线程开启了" + i);
        }
    }
}


package com.hfut.edu.test11;

public class test1 {
    public static void main(String[] args) {
        MyThread  m1 = new MyThread();
        m1.start();// 开启一个线程

        MyThread m2 = new MyThread();
        m2.start();
        // 线程交替执行
    }
}

run方法与start方法的区别:run方法表示的仅仅是创建对象,使用对象去调用方法,并没有开启线程,使用start方法开启线程

在这里插入图片描述

start方法启动线程;然后使用JVM调用此线程的run()方法

  • 开启多线程实现方式-runable接口

在这里插入图片描述

实现Runable 接口

package com.hfut.edu.test11;

public class MyRunable implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("第二种多线程的实现" + i);
        }
    }
}


package com.hfut.edu.test11;

public class tewts2 {
    public static void main(String[] args) {
        // 创建一个参数对象
        MyRunable mr = new MyRunable();
        // 创建线程对象 将参数传递给这个线程
        Thread t1 = new Thread(mr);
        t1.start();


        MyRunable mr1 = new MyRunable();
        Thread t2 = new Thread(mr1);
        t2.start();

        // 线程交替执行
    }
}


多线程实现方式-Callable

在这里插入图片描述

package com.hfut.edu.test11;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<String> {

    // 实现call 方法
    @Override
    public String call() throws Exception {
        for (int i = 0; i < 100; i++) {
            System.out.println("hhhhhhhh" + i);
        }
        return "xxxx";
    }
}


package com.hfut.edu.test11;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Demo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc = new MyCallable();
        FutureTask<String> ft = new FutureTask<>(mc);// 可以获取线程执行完毕之后的结果
        Thread t1 = new Thread(ft);
        t1.start();

        String s = ft.get();// 获取线程执行之后的结果
        System.out.println(s);
    }
}


三种实现方式的对比

在这里插入图片描述

Thread方法

  • 获取线程名称
package com.hfut.edu.test11;

public class MyThread extends Thread{

    // 重写run方法
    @Override
    public void run() {
        // 获取线程的名称
        String name = getName();
        System.out.println(name);
    }
}
  • 获取当前线程
package com.hfut.edu.test11;

public class MyThread extends Thread{

    // 重写run方法
    @Override
    public void run() {
        // 获取线程的名称
        Thread t = Thread.currentThread();// 静态方法调用
        System.out.println(t);
    }
}


  • 多线程的带参数构造方法
package com.hfut.edu.test11;

public class MyThread extends Thread{

    public MyThread(){}

    public MyThread(String name){
        super(name);// 设置线程的名称
    }

    // 重写run方法
    @Override
    public void run() {
        // 获取线程的名称
        Thread t = Thread.currentThread();// 静态方法调用
        System.out.println(t.getName());// 打印线程的名字
    }
}

  • Sleep方法
package com.hfut.edu.test11;

public class test3 {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i < 61; i++) {
            System.out.println(i);
            Thread.sleep(1000);// 程序休眠1s
        }


    }
}

守护线程

  • 当守护线程执行完毕,其他线程也就没有执行下去的必要

在这里插入图片描述

package com.hfut.edu.test11;

public class test4 {
    public static void main(String[] args) {
        MyThread1 m1 = new MyThread1();
        MyThread2 m2 = new MyThread2();

        m1.setName("主线程");
        m2.setName("其他线程");

        m1.setDaemon(true);// 主线程执行完毕 其他线程直接结束

        m1.start();
        m2.start();
    }
}

线程的优先级

在这里插入图片描述

  • 优先级更高 抢到CPU的几率更高
package com.hfut.edu.test11;

public class test4 {
    public static void main(String[] args) {
        MyThread1 m1 = new MyThread1();
        MyThread2 m2 = new MyThread2();

        m1.setName("主线程");
        m2.setName("其他线程");

        m1.setDaemon(true);// 主线程执行完毕 其他线程直接结束

        m1.start();
        m2.start();

        System.out.println(m1.getPriority());// 打印线程的优先级   默认优先级5
        System.out.println(m2.getPriority());//
        
        m1.setPriority(6);
        m2.setPriority(7);// 设置线程的优先级
    }
}


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

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

相关文章

2022年最新年终奖个人所得税计算计算方法及扣税标准

1、2021年12月30号&#xff0c;国务院决定年终奖等三项个税优惠续期&#xff1a;http://www.gov.cn/zhengce/2021-12/30/content_5665553.htm2、税务总局公告2019年第35号《关于非居民个人和无住所居民个人有关个人所得税政策的公告》&#xff1a;http://www.gov.cn/zhengce/zh…

一、Django项目创建

一. Python项目虚拟环境创建 在项目开发过程中会下载很多第三方库&#xff0c;有时不同项目对同一个库的依赖版本不同&#xff0c;如果所有项目都使用同一个python环境就会起冲突不便于管理。因此&#xff0c;实际开发中会为每一个项目都单独创建一个python的虚拟环境。这里的…

多线程~POSIX信号量实现生产者消费者模型,PV操作

目录 1.信号量的概念 2.sem_t信号量的操作函数 &#xff08;1&#xff09;.原理 &#xff08;2&#xff09;.sem_t函数的使用 &#xff08;3&#xff09;.基于信号量和环形队列的生产者消费者模型 1&#xff09;.大致实现思路 Task.hpp circular_queue.hpp circular_c…

基于java SSH框架的简单医疗管理系统源码+数据库,医疗管理系统基于springmvc+spring+hibernate

医疗管理系统 基于java SSH框架的简单医疗管理系统 环境说明 1、语言及开发环境&#xff1a; 语言实现说明JAVA后端用springmvcspringhibernate&#xff0c;前端使用htmlajax开发环境使用eclipse&#xff0c;maven管理。 数据库使用mysql&#xff1b; 完整代码下载地址&…

3D设计软件SolidWorks特征研究—— 3种放样方式 | 附视频教程

SolidWorks 是世界上第一个基于Windows开发的三维CAD系统&#xff0c;是可实现设计、模拟、成本估算、可制造性检查、CAM、可持续设计和数据管理等多种功能的三维设计软件&#xff0c;包含适用于钣金、焊件、曲面、模具、产品配置、DFM和CAM的专业工具&#xff0c;同时支持ECAD…

跑步耳机入耳式好还是半入耳式好、跑步用的耳机推荐

运动耳机一定是要跟佩戴舒适性、音质、性能关联在一起的&#xff0c;尤其是专业的运动耳机&#xff0c;还要具有久戴舒适运动时还不掉的特点&#xff0c;这个是我认为无论任何价价位的运动耳机都必须首要具备的条件&#xff0c;戴久了不舒服或者总掉&#xff0c;音质再好估计都…

带你了解防火墙

目录 1、什么是防火墙&#xff1f; 2、iptables 3、firewalld 如何实现端口转发&#xff1f; 1、什么是防火墙&#xff1f; 防火墙&#xff1a;防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙又可以分为硬件…

Error: Can‘t find Python executable “python“, you can set the PYTHON env var

亲测可用&#xff0c;若有疑问请私信 此问题&#xff0c;自己分析了好久才找到问题。其实有两种解决方案&#xff0c;我这里举例了一个&#xff0c;另一种环境变量配置也是可以的。希望能帮到大家。 问题描述&#xff1a; 在执行npm install 过程中出现 V未安装 解决方案&…

Python学习笔记-PyQt6工具栏

工具栏工具栏可以有多个&#xff0c;而且可以设置不同的位置参数。4.1工具栏位置参数QtCore.Qt.ToolBarArea.LeftToolBarAreaQtCore.Qt.ToolBarArea.RightToolBarAreaQtCore.Qt.ToolBarArea.TopToolBarAreaQtCore.Qt.ToolBarArea.BottomToolBarAreaQtCore.Qt.ToolBarArea.AllTo…

库的制作相关信息

库 通过把函数进行打包&#xff0c;然后形成相应的库&#xff0c;供其他的主函数使用。 静态库 以.a进行结尾&#xff0c;把库的东西&#xff08;头与库文件进行打包到之中&#xff09;打包到可执行程序之中。 静态库不是使用相对的位置信息&#xff0c;直接的信息。 bank…

如何通过Java导出带格式的 Excel 数据到 Word 表格

在Word中制作报表时&#xff0c;我们经常需要将Excel中的数据复制粘贴到Word中&#xff0c;这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件。但是如果表格比较长&#xff0c;内容就会存在一定程度的丢失&#xff0c;无法完整显示数据。并且当工作量到达一定程度…

.net6 Web Api使用JWT-从后端到前端全部过程

jwt是做验证的必经之路&#xff0c;至于原理&#xff0c;就不在叙述了&#xff0c;可以参考官网 jwt官网介绍 JSON Web Tokens - jwt.io 原理介绍 JSON Web Token 入门教程 - 阮一峰的网络日志 看完之后&#xff0c;结合这个图&#xff0c;就明白了。 本案例使用vs2022&…

从技术专家到总经理,在不确定中探索和成长

你好&#xff0c;我是石东海。 前段时间我应邀跟一些企业做过一些交流&#xff0c;探讨在这个数字化时代&#xff0c;怎么去解决技术团队所面临的一些共性问题&#xff0c;包括技术思维转变和管理思维转变方面所经历的挑战。期间谈到了一些我个人的经历&#xff0c;以及这两年…

哈希表(一)—— 闭散列 / 开放地址法的模拟实现

哈希表的基本思路是通过某种方式将某个值映射到对应的位置&#xff0c;这里的采取的方式是除留余数法&#xff0c;即将原本的值取模以后再存入到数组的对应下标&#xff0c;即便存入的值是一个字符串&#xff0c;也可以根据字符串哈希算法将字符串转换成对应的ASCII码值&#x…

这家十年磨剑的企业级存储厂商,为什么将分布式块存储也开源了?

只要提到企业级存储&#xff0c;任何成功的厂商无不以十年为单位的积累&#xff0c;才能实现真正的创新。当然&#xff0c;作为存储领域相对更为复杂的分布式块存储&#xff0c;存储创新公司一般都不太愿意碰它。原因很简单&#xff0c;在技术自研的道路上&#xff0c;更需要坐…

Nginx之限流

文章目录Nginx如何限流配置基本的限流处理突发无延迟的排队高级配置示例location包含多limit_req指令配置相关功能发送到客户端的错误代码指定location拒绝所有请求总结流量限制(rate-limiting)&#xff0c;是 Nginx 中一个非常实用&#xff0c;却经常被错误理解和错误配置的功…

JavaScript 数据处理 · 基本统计(文末附视频)

第 5 节 基本数据处理 基本统计 学习了如何对 JavaScript 中的数组数据进行操作之后&#xff0c;我们就要回到刚开始选择购买这本小册的目的了&#xff1a;使用 JavaScript 开发灵活的数据应用。既然说是数据应用&#xff0c;那么便离不开统计计算&#xff0c;而数组就可以说…

Android 设备自动重启分析[低内存]——MTK平台 debuglogger

大家有没有遇到和我一样的问题&#xff0c;android设备(我这里android 平板)用着用着突然就黑屏自动重启了&#xff0c;重启后一切正常&#xff0c;这个问题还是概率性的&#xff0c;复现都不好复现... 本人公司是做平板定制的&#xff0c;主要针对平板进行上网限制&#xff0c…

C语言进阶——字符函数

目录 一.前言 二.strlen 1.函数介绍 2.三种模拟实现 三.长度不受限制函数 1.strcpy 模拟实现 2.strcat 模拟实现 3.strcmp 模拟实现 四.长度受限制函数 1.strncpy 模拟实现 2.strncat 模拟实现 3.strncmp 模拟实现 五.字符串查找 1.strstr 模拟实现 2.st…

手把手教你快速搞定4个职场写作场景

“ 【写作能力提升】系列文章&#xff1a; 为什么建议你一定要学会写作? 手把手教你快速搞定 4 个职场写作场景 5 种搭建⽂章架构的⽅法”免费赠送! ”一、前言 Hello&#xff0c;我是小木箱&#xff0c;今天主要分享的内容是: 写作小白需要避免的五个写作误区和灵魂五问。 二…