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()启动,否则会报错。

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

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

相关文章

安装ps提示msvcr71.dll丢失的解决方法,全面解析dll问题

当您在安装PS软件时遇到msvcr71.dll丢失的问题&#xff0c;这是因为该文件是某些程序运行必需的。msvcr71.dll主要包含了C运行时库的函数&#xff0c;这些函数主要用于处理字符串、数学运算、内存管理等基本操作。例如&#xff0c;我们在编写程序时&#xff0c;需要对字符串进行…

【PyQt】(自定义类)QIcon派生,更易用的纯色Icon

嫌Qt自带的icon太丑&#xff0c;自己写了一个&#xff0c;主要用于纯色图标的自由改色。 当然&#xff0c;图标素材得网上找。 Qt原生图标与现代图标对比&#xff1a; 没有对比就没有伤害 Qt图标 网络素材图标 自定义类XJQ_Icon&#xff1a; from PyQt5.QtGui import QIc…

《企业数据资源相关会计处理暂行规定》学习笔记

附&#xff1a;2023年数据资源入表白皮书下载&#xff1a; 关注WX公众号&#xff1a; commindtech77&#xff0c; 获得数据资产相关白皮书下载地址 1. 回复关键字&#xff1a;数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字&#xff1a;光大银行 下载 光…

【Spring实战】12 Thymeleaf

文章目录 1. 定义2. 设计目标3. 官网4. Spring 集成 Thymeleaf1&#xff09;添加依赖2&#xff09;创建模版3&#xff09;创建Controller4&#xff09;启动程序5&#xff09;执行验证 5. 代码详细总结 1. 定义 Thymeleaf 是一个用于在 Web 应用程序中进行服务器端 Java 模板渲…

《A++ 敏捷开发》-2 改进从团队开始

上一章介绍了丰田方式水面下的七个习惯&#xff0c;但公司应如何有效开展与推行&#xff1f;有哪些误区要注意&#xff1f;我们先看美国东岸某家小印刷公司的故事。 美国费城Weisbord故事 60年代复印机还未普及&#xff0c;很昂贵&#xff0c;所以有不少公司专门为各类公司客…

Oracle 19c OCP 1z0 082考场真题解析第17题

考试科目&#xff1a;1Z0-082 考试题量&#xff1a;90 通过分数&#xff1a;60% 考试时间&#xff1a;150min 本文为云贝教育郭一军guoyJoe原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 17. Which three …

AtCoder Beginner Contest 334 G

G.Christmas Color Grid 2&#xff08;枚举&#xff0c;Tarjan&#xff09; 题意&#xff1a; 本题与问题 E E E类似。有一个 H H H行和 W W W列的网格&#xff0c;每个单元格都被涂成红色或绿色。用 ( i , j ) (i,j) (i,j)表示从上到下第 i i i行、从左到右第 j j j列的单元…

51单片机的中断相关知识

51单片机的中断相关知识点 一、中断概念和功能 概念 程序执行过程中CPU会遇到一些特殊情况&#xff0c;是正在执行的程序被“中断”&#xff0c;cpu中止原来正在执行的程序&#xff0c;转到处理异常情况或特殊事件的程序去执行&#xff0c;结束后再返回到原被中止的程序处(断…

Linux报错:audit: backlog limit exceeded

今天&#xff0c;一台虚拟机上操作昨天打开的连接一直没响应&#xff0c;新打开连接连接不上。SSH校验不通过。 通过IT的后台&#xff0c;可以看到满屏的audit: backlog limit exceeded。 问题原因&#xff1a;audit服务记录的审计事件超出默认(或设置)数量 &#xff0c;达到或…

git回滚操作,常用场景

文章目录 git回滚操作1.git reset --hard 【版本号】2.回滚后的版本v2又想回到之前的版本v32.1 git reflog 3.git checkout -- 文件名4.git reset HEAD 文件名 git回滚操作 假设我们现在有三个版本 现在回滚一个版本 1.git reset --hard 【版本号】 发现只剩下两个版本了 2.…

Java关键字(1)

Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字&#xff1a; public&#xff1a;表示公共的&#xff0c;可以被任何类访问。 private&#xff1a;表示私有的&#xff0c;只能被定义该关键字的类访问。 cl…

【Linux】chage命令使用

chage命令 chage用来更改linux用户密码到期信息&#xff0c;包括密码修改间隔最短、最长日期、密码失效时间等。 语法 chage [参数] 用户名 chage命令 -Linux手册页 选项及作用 执行令 &#xff1a; chage --help 执行命令结果 参数 -d, --lastday 最近日期 …

基于NXP I.MX8 + Codesys的工业软PLC解决方案

全新i.MX 8M Plus是一个混合人工智能SoC&#xff0c;将先进的嵌入式SoC与最新的人工智能/机器学习硬件NPU技术相结合&#xff0c;通过神经网络加速器&#xff0c;为边缘计算提供强大的机器学习能力&#xff0c;是i.MX 8M Plus一个最为突出的优势。WEC-IMX8P核心板特别适合在机器…

Elasticsearch 8.X进阶搜索之“图搜图”实战

Elasticsearch 8.X “图搜图”实战 1、什么是图搜图&#xff1f; "图搜图"指的是通过图像搜索的一种方法&#xff0c;用户可以通过上传一张图片&#xff0c;搜索引擎会返回类似或者相关的图片结果。这种搜索方式不需要用户输入文字&#xff0c;而是通过比较图片的视…

智慧园区物联综合管理平台感知对象管理能力简述

物联感知对象管理, 不局限于物理传感设备, 还包括物联业务对象, 平台提供标准的设备建模能力以及标准的物联设备、 第三方物联系统SDK接入方案等; 实现对感知对象运行、 报警、 故障状态的反馈以及物联感知对象全生命周期信息管理。 基础定义配置 平台提供物联网目感知对…

【C/C++笔试练习】sort排序、STL容器、vector的特性、一级容器、迭代器失效、异常捕获、动态转换、统计每个月兔子的总数、字符串通配符

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;sort是不稳定排序&#xff08;2&#xff09;存放即有序的STL容器&#xff08;3&#xff09;连续储存的STL容器&#xff08;4&#xff09;vector的特性&#xff08;5&#xff09;一级容器&#xff08;6&#xff09;unorde…

DES加密算法优缺点大揭秘:为何它逐渐被取代?

一、引言 DES&#xff08;Data Encryption Standard&#xff09;加密算法作为一种历史悠久的对称加密算法&#xff0c;自1972年由美国国家标准局&#xff08;NBS&#xff09;发布以来&#xff0c;广泛应用于各种数据安全场景。本文将从算法原理、优缺点及替代方案等方面&#…

在线电路仿真分析 : CircuitJS + EveryCircuit + 嘉立创EDA

CircuitJS CircuitJS是一款免费的在线电路仿真工具。绿色&#xff1a;正电压&#xff0c;红色&#xff1a;负电压&#xff0c;黄色&#xff1a;电流。 EveryCircuit EveryCircuit 是一个易于使用、高度交互的电路模拟器和 原理图捕获工具。其用户社区创建了数百万个电路设计。动…

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…