Java学习:多线程编程

一、概念

        进程:它是运行中的程序。有的程序启动后可能有多个进程。Java程序的执行时,首先启动一个独立的JVM进程。该进程任务是解析并执行Java字节码。进程各有独立地址空间,JVM进程间不能访问对方所拥有内存空间。

        线程:一个进程可以包含多个线程,但至少要包含一个线程。

二、线程 Thread类和Runnable接口

 1.简介

        :java.lang.Thread 其代表可被JVM操控的线程。

        接口:java.lang.Runnable  它不是线程,它可以通过覆写run()方法,编写执行任务的代码。可以将Runnable编写的对象传入Thread线程中。

        换个说法来说,可以看作JVM为只有安装了一个主线程CPU的虚拟机,而创建Thread实例,为加装额外CPU,而Thread的start()为启动额外CPU,而run()内部为额外CPU所需要做的事。

2.常用方法

3.创建线程的两种方式 

  • 第一种方法:自定义类继承Thread类
  • 1.覆写run()方法。
  • 2.创建该类对象。
  • 3.调用start()方法
  • 实例:
    class MyThread extends Thread{  
        public void run(){  
            for (int i = 0; i < 10; i++){  
                System.out.println(i);  
            }  
        }  
    }  
    public class test1{  
        public static void main (String[] args){  
            MyThread a = new MyThread();  
            a.start();  
            for (int j = 0; j < 100; j++){  
                System.out.println("test1.main()----"+j);  
            }  
        }  
    }  
  • 第二种方法:自定义类继承Runnable接口
  • 1.覆写run()方法。
  • 2.创建实例对象。
  • 3.添加到Thread对象内。
  • 4.调用Thread对象的start()方法。
  • 实例:
    ​
    class MyThread implements Runnable{  
        public void run (){  
            for (int i = 0; i < 50; i++){  
                System.out.println(i);  
            }                   
        }  
    }  
    public class test1{  
        public static void main (String[] args){  
            MyThread a = new MyThread();  
            Thread a1 = new Thread(a);    
            a1.start();  
        }  
    }
    
    ​

三、线程生命周期

1.默认方式

        主线程从main()方法开始执行,直到main()方法结束停止JVM,如果主线程启动了额外线程,那就要等到所有线程都执行完run()方法才终止JVM。

2.Daemon线程

        一个线程如果被标记为Deamon线程,当所有非Deamon线程都结束时,JVM就会自动终止。可以使用setDeamon()方法来设定线程是否为Deamon线程。可以使用isDeamon()方法来判断线程是否为Deamon线程。

        默认从Deamon线程产生的线程也为Deamon线程,main方法默认为非Deamon线程。

3.Thread基本状态图

  • 调用Thread实例start()方法后,线程状态变为Runnable可运行状态。此时线程还未开始执行run()方法。
  • 排班器Schedule按照优先级排入CPU执行线程run(),优先级可利用setpriority()设置,范围为1(Thread.MIN_PRIORITY)~ 10(Thread.MAX_PRIORITY),默认为5(Thread.NORM_PRIORITY),超出范围会抛出IllegalArgumentException异常,数字越大,优先级越高,越先排入CPU。
  • 当线程运行时碰到sleep(),锁,wait()等会让线程进入Blocked阻断状态,此时可以让其他线程进入CPU,提高运行效率。

4.安插线程

        当一个线程A在执行时,线程B通过join()方法让线程A停下工作,让CPU先执行B线程的工作,等待B线程结束,才继续执行线程A的工作。

        因此,Thread 的 join()方法让原来的线程停止,安插新线程工作,让优先级改变。可以给join指定参数,表示多少ms后停止的线程启动,不在管安插的新线程是否结束。

5.停止线程

        线程运行完run()方法后,会进入Dead状态,进入此状态的线程不可再次使用start()启动,否则会报错。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ros2中ros_gz_bridge/gazebo安装的注意事项

这个搞错了&#xff1a;这个是安装ros_gz_bridge的&#xff0c;不是安装gazebo的 AT:如果是安装的Harmonic&#xff0c;在安装ros_gz_bridge的时候要从源码编译 ros2完整版里面好像已经包含了gazebo的一个版本 包名应该就是叫ros-humble-ros-ign-gazebo 所以gazebo是作为一个普…

IRIS、Cache系统类汉化

文章目录 系统类汉化简介标签说明汉化系统包说明效果展示类分类%Library包下的类重点类非重点类弃用类数据类型类工具类 使用说明 系统类汉化 简介 帮助小伙伴更加容易理解后台系统程序方法使用&#xff0c;降低代码的难度。符合本土化中文环境的开发和维护&#xff0c;有助于…

Openstack开启虚拟化嵌套

好久没写东西了&#xff0c;前两天我准备在虚机上装一个vmware 的虚机&#xff0c;结果失败了&#xff0c;提示如下&#xff0c;由于我是虚机上安装虚机&#xff0c;我的宿主机肯定是开启了vt-x和vt-d的 查了一些资料&#xff0c;这个需要打开nested,先看看nested返回是否为Y&a…

【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch等各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;…

【Linux基础】6. 进程管理工具

文章目录 【 1. 查询进程 】【 2. 终止进程 】【 3. top 进程监控 】【 4. pmap 分析线程栈 】【 5. 综合运用 】 任何进程都与文件关联&#xff1b;我们会用到 lsof 工具&#xff08;list opened files&#xff09;&#xff0c;作用是列举系统中已经被打开的文件。在 linux环境…

【MySQL】数据库之日志管理、备份与恢复

目录 一、MySQL的日志管理 二、MySQL的完全备份与恢复 物理冷备份&#xff08;完全备份&#xff09;与恢复 数据库上云迁移的方案&#xff1f; 逻辑热备份&#xff08;完全备份&#xff09;与恢复 三、MySQL的增量备份与恢复 1、手动增量备份 2、脚本增量备份 3、增量备…

华为鸿蒙的发展史:从初创到全球领先的科技之旅

华为鸿蒙操作系统的发展历程堪称科技领域的传奇。作为中国科技产业的璀璨明星&#xff0c;鸿蒙系统在面临外部压力与挑战的同时&#xff0c;凭借着华为的坚定信念与不懈努力&#xff0c;逐步崛起成为全球领先的智能终端操作系统。本文将带您深入了解华为鸿蒙的发展史&#xff0…

ThreadPoolExecutor使用浅谈

1. 基础介绍 ThreadPoolExecutor是Python标准库concurrent.futures模块中的一个类&#xff0c;用于实现线程池的功能。 ThreadPoolExecutor模块相比于threading等模块&#xff0c;通过submit方法返回的是一个Future对象&#xff0c;它代表了一个未来可期的结果。通过Future对…

一文教你如何绕过统一认证拿到赏金

1.漏洞背景 统一认证通常是一种安全措施&#xff0c;用于验证用户的身份&#xff0c;以确保只有授权的用户才能访问敏感或受限的信息和服务。 当你尝试访问某个需要特定权限的网站或服务时&#xff0c;系统会将你重定向到一个统一认证页面。在这里&#xff0c;你需要输入你的登…

【鸿蒙应用ArkTS开发系列】- 沉浸式状态栏实现

文章目录 一、前言二、封装沉浸式状态栏管理类1、创建Demo工程2、封装状态栏管理类 三、编写页面实现沉浸式状态栏效果1、存储windowStage实例2、Page页面中实现沉浸式开启关闭功能2.1、开启沉浸式状态栏2.2、设置标题栏偏移量 一、前言 在应用开发中&#xff0c;页面跟状态栏…

Java代码审计鉴权漏洞InterceptorFilterShiroJWT(非常详细!!)

目录 0x00 前言 0x01 鉴权方式&审计思路 1、目前主流的鉴权方式 2、鉴权漏洞审计思路 0x02 Interceptor鉴权审计 - NewbeeMall电商系统 1、项目介绍 - NewbeeMall 2、Interceptor 补充介绍 3、NewbeeMall - Interceptor鉴权 - 代码审计 0x03 Filter鉴权审计 - 华…

PostGIS学习教程十五:几何图形的有效性

PostGIS学习教程十五&#xff1a;几何图形的有效性 在90%的情况下&#xff0c;“为什么我的查询给了我一个’TopologyException’错误"的问题的答案是"一个或多个输入的几何图形是无效的”&#xff0c;这就引出了这样一个问题:几何图形"无效"是什么意思&a…

JAVA复习三——CH5 Java Collection 、CH6 MultiThread

CH5 Java Collection(集合) 5.1 Java集合框架&#xff08;位于java.util包中&#xff09; 图一 集合框架图 从上面的集合框架图可以看到&#xff0c;Java 集合框架主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集…

pytest分布式执行插件 pytest-xdist 的高级用法

想要使用多个CPU核心来进行测试&#xff0c;可以使用 -n 参数( 或者 --numprocesses) (使用8个核心来跑测试用例) 1 pytest -n 8 使用 -n auto 参数可以利用电脑的所有核心来跑测试用例 测试时使用的算法可以根据--dist命令参数定制&#xff1a; --dist load(默认选项)&…

手拉手Springboot整合JWT

环境介绍 技术栈 springbootmybatis-plusmysqljava-jwt 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 Json Web令牌简称JWT Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。…

【多省市译协盖章】2023年第九届中西部外语翻译大赛

“由中西部翻译协会共同体指导发起&#xff0c;各省市译协共建学术指导委员会&#xff0c;2023年第九届中西部外语翻译大赛由中西部翻译协会共同体秘书处&#xff08;武汉公仪网络科技有限公司&#xff09;承办。” &#xff08;证书样图&#xff09; 证书盖章单位&#xff1…

文件重命名:特殊符号影响你找文件吗?来看看这个解决方法

在日常生活和工作中&#xff0c;电脑已经成为必不可少的工具&#xff0c;而文件管理也是一项重要的任务。有时候遇到文件重命名的问题&#xff0c;例如当文件名中包含特殊符号时&#xff0c;这可能会给工作带来很大的困扰。当尝试寻找一个文件时&#xff0c;却发现因为文件名中…

Linux的账号及权限管理

一.管理用户账号 1.1 用户账户的分类 1.1.1 用户账号的分类 超级用户&#xff1a;&#xff08;拥有至高无上的权利&#xff09; root用户是Linux操作系统中默认的超级用户账号&#xff0c;对本主机拥有最高的权限&#xff0c;系统中超级用户是唯一的。普通用户&#xff1a; …

c++学习笔记(6)-类型转换

1、概念 C类型转换是将一种数据类型转换为另一种数据类型的过程。 2、分类 C中的类型转换可以从3个角度来划分&#xff1a; 根据类型转换是由程序员显式指定&#xff0c;还是由编译器自动完成&#xff0c;分为显式类型转换和隐式类型转换&#xff1b;根据参与类型转换的变量…

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.…