Java基础知识(十)--多线程

【Java篇】多线程详解 Java系统在语言层次上对多线程直接提供支持,多线程的主要目的是将一个程序中的各个程序段并发化,在在通常情况下,Java程序各部分是按顺序一次执行的,由于某种原因,需要将这些按顺序执行的程序段转化为并发执行,每个程序段在逻辑上是相互完整的代码段。实际上,在单处理器上,同一时刻只能执行一个代码,但是在同一时间段内,这些代码交替执行,所谓的“微观串行,宏观并行”。... 阅读详情

微信公众号:Java患者
专注Java领域技术分享

多线程

什么是线程

  • 线程是程序执行的一条路径,一个进程中可以包含多条线程

  • 多线程并发执行可以提高程序的效率,可以同时完成多项工作

多线程并行和并发的区别

  • 并行就是两个任务同时进行,需要多核CPU

  • 并发是指两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行.

java程序运行原理和jvm的启动是多线程的吗

  • java程序运行原理

    • java命令会启动java虚拟机,启动jvm,等于启动了一个应用程序,也就是启动过来一个进程,该进程会自动启动一个"主线程",然后主线程去调用某个类的main方法

  • jvm的启动是多线程的吗

    • jvm启动至少启动了垃圾回收线程和主线程,所以是多线程的

多线程程序实现的方式1

public class Demo2_Thread {

 /**
  * @param args
  */
 public static void main(String[] args) {
  MyThread mt = new MyThread();       //4,创建自定义类的对象
  mt.start();            //5,开启线程
  
  for(int i = 0; i < 3000; i++) {
   System.out.println("bb");
  }
 }

}
class MyThread extends Thread {         //1,定义类继承Thread
 public void run() {           //2,重写run方法
  for(int i = 0; i < 3000; i++) {       //3,将要执行的代码,写在run方法中
   System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  }
 }
}
  • 多线程程序实现方式2

public class Demo3_Runnable {
 /**
  * @param args
  */
 public static void main(String[] args) {
  MyRunnable mr = new MyRunnable();      //4,创建自定义类对象
  //Runnable target = new MyRunnable();
  Thread t = new Thread(mr);        //5,将其当作参数传递给Thread的构造函数
  t.start();            //6,开启线程
  
  for(int i = 0; i < 3000; i++) {
   System.out.println("bb");
  }
 }
}

class MyRunnable implements Runnable {       //1,自定义类实现Runnable接口
 @Override
 public void run() {           //2,重写run方法
  for(int i = 0; i < 3000; i++) {       //3,将要执行的代码,写在run方法中
   System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  }
 }
 
}

守护线程

  • setDaemon(),设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动退出

加入线程

  • join() 当前线程暂停,等待指定的线程执行结束后,当前线程再继续

  • join(int) 可以等待指定的毫秒之后继续

礼让线程

  • setPriority() 设置线程的优先级

同步代码块

  • 什么情况下需要同步

    • 当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这时就需要同步

    • 如果两段代码是同步的,那么同一时间只能执行一段,在一段代码没执行结束之前,不会执行另外一段代码.

  • 同步代码块

    class Printer {
     Demo d = new Demo();
     public static void print1() {
      synchronized(d){    //锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象
       System.out.print("程");
       System.out.print("序");
       System.out.print("员");
       System.out.print("\r\n");
      }
     }
    
     public static void print2() { 
      synchronized(d){ 
       System.out.print("码");
       System.out.print("农");
       System.out.print("\r\n");
      }
     }
    }
    • 使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块

    • 多个同步代码块如果使用相同的锁对象,那么他们就是同步的

资料 · 福利

回复 【Java】即可获取最新零基础Java视频资料

回复 【激活】即可获取IDEA、datagrip等系统激活方式

回复 【面试题】即可获取Java技术相关面试题

往期 · 精彩

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

c6185363e0f9160140ab1f7fd48bd363.png

72f73c3594271053693231b4b0c24a90.jpeg

反无人机技术实战解析:从探测到拦截的全方位防御策略 本文深入解析了反无人机(C-UAS)技术的全链条防御策略。从雷达、无线电频谱、光电等多维度探测技术,到数据融合与威胁评估,再到无线电干扰、导航诱骗及物理拦截等核心拦截手段,系统阐述了如何构建从探测到拦截的实战化防御体系,为关键设施、大型活动等场景提供定制化空域安全解决方案。 阅读详情

相关推荐

遥感卫星影像AI数据集格式规范详解、技术原理与数据生产全流程技术手册

本技术手册旨在系统性地梳理遥感卫星影像AI数据集的各类格式标准(涵盖VOC、COCO、YOLO及遥感专用DOTA格式等),深入剖析其背后的技术原理,并详细阐述数据生产的全过程,涵盖预处理、标注、质量控制及数据增强等关键环节。无论您是刚入门的算法工程师,还是资深的数据生产管理者,本手册都将为您提供详实的参考与指引。

panshengwu的博客 1124

Java中所有的关键字及用法

基本数据类型: int: int 基本数据类型 ,内存空间占8位 取值范围-128~127 int i=10; float float 基本数据类型 ,内存空间占32位 取值范围 -2^31~-2^31-1 float f=10.0f; long long 基本数据类型 内存空间占 64位 取值范围 -2^63~-2^63-1 long l=10l; short short 基本数据类型 内存空间占16位 取值范围 -2^15~-2^15-1 s...

weixin_47325151的博客 7326

ArduPilot + Gazebo + Mavros + QGC + 遥控器:从仿真到实机的自主轨迹控制实践

本文详细介绍了基于ArduPilot、Gazebo、Mavros和QGC的无人机自主轨迹控制全流程实践。从仿真环境搭建、多终端协同配置,到遥控器集成与自主圆形轨迹算法实现,提供了完整的代码示例和实机迁移要点,帮助开发者快速掌握无人机自主控制技术。

corn8的博客 940

JAVA线程同步的探究(1)

<br />测试一:<br /> <br />public class ThreadSynchronized {<br /> /**<br />  *  由于三个线程之间没有同步,所以会出现打印错误的状况<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  final Activity a = new Activity();<br />  for (int i = 0; i < 3; i++

张进の专栏 811

Altium Designer应用技巧5: Altium Live账号的获得

为了更好的应用Altium Designer,我们需要得到一个Altium Live账号,但从其英文或者中文官方网站取得,都需要7个工作日的时间,而且对于个人用户来说,并不是100%都能够获取到。本文介绍一种,从俄罗斯Altium官方网站获取账号的方法,可以立即使用。     1、点击http://live.altium-ru.com/#Join网址进入俄罗斯Altium官方网站,Altiu

snmplink的博客 1万+

7 中望CAD二次开发-标注(一)(ZRX C++)

尺寸标注是CAD设计中最常用的功能之一,软件内置了很多标注功能,可以通过使用这些标注工具,对需要标注的长度、角度等一个个进行标注。但这显然效率很低,学习CAD二次开发,就是要把人从重复的劳动中解放出来,实现批量标注。本文介绍,如何通过二次开发进行标注。

cilvsuanna的博客 337

JAVA基础WEB阶段第四天——线程进程与网络编程

一.多线程 1.并行与并发 并行: 多个CPU在同一时刻执行多个任务. 并发:一个CPU在同一时刻执行一个任务,切换速度很快,让人们感觉任务都在执行 2.进程与线程 一般一个应用程序对应一个或多个进行. 一个进程中包含了至少一个线程. 线程是进程最小的运行单元. 区别: - 进程:有独立的内存...

东城庞太师 429

1.嵌入式控制器EC学习,编译环境搭建

工欲善其事,必先利其器。 在学习EC相关知识之前,首先需要完成EC代码编译环境的搭建,需要如下内容: Keil C51(用于EC中C代码的编译器环境) EC源代码,我们使用从网上可以下载到的 ITE_V12.4_Update 版的代码为例进行学习 代码编辑器,这个可以根据自己的习惯选择,VS Code或者Source Insight等 Keil C51下载地址: http://www.downcc.com/soft/307131.html 下载完成后请进行破解 EC源代码 ...

qq_30135687的博客 3915

Java基础知识(十) 多线程

Java基础知识1. 什么是多线程?它与进程有什么区别?为什么要使用多线程2. 同步和异步有什么区别3. 如何实现Java多线程4. run()方法与start()方法有什么区别5. 多线程同步的实现方法有哪些1. synchronized关键字2. wait()方法与notify()方法3. Lock6. sleep()方法与wait()方法有什么区别7. 终止线程的方法有哪些8. synchronized与Lock有什么异同9. 什么是守护线程10. join()方法的作用是什么 上一篇:Java基础知

码出精彩 478

学习STM32的ADC采集声音

为了采集声音信号,需要一个声音传感器(如麦克风),将声音信号转换为电压信号输入到 ADC 引脚。通过硬件准备、STM32CubeMX 配置和代码实现,我们可以实现将声音信号转换为数字信号,并进行后续处理。STM32 是一款广泛应用于嵌入式系统开发的微控制器平台,其拥有丰富的外设和强大的性能,非常适合进行 ADC(模拟数字转换)的声音采集。函数启动 ADC1 的连续转换模式,然后在一个无限循环中等待 ADC 转换完成,并读取采样结果。四、代码实现 在生成的代码中,会生成一些相关的库文件和示例代码。

m0_75244442的博客 2173

tun虚拟网卡没有安装解决之道

目录 描述 过程 一、sstap 会提示你虚拟网卡没有安装; 二、还有会是这样的:病毒和威胁防护中无法启动;引擎不可以用等等,以及会显示需要IT管理员去处理;等等报错的信息; 系统升级地方会显示:Windows Defender Antivirus 的安全智能更新 - KB2267602 (版本 1.305.2147.0) - 错误 0xc8000442 Windows Defender报错; 三、还有就是会出现你搜自己家的WIFI搜不到,电脑端都不会显示WIFI名字; 解决方...

战神/calmness的博客 1万+

Java基础知识(十)——Java多线程

1、什么是线程?它与进程有什么区别?为什么要使用多线程 线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在Java语言中,线程有4种状态:运行、就绪、挂起和结束。 进程是指一段正在执行的程序。而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程拥...

复制乔布斯 431

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

快速查漏补缺Java基础知识(十)多线程

概述生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产者消费者问题,实际上主要是包含了两类线程:​ 一类是生产者线程用于生产数据​ 一类是消费者线程用于消费数据为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为Object类的等待和唤醒方法方法名说明。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 271

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

快速查漏补缺Java基础知识(十)多线程02

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢?Java中的线程/* 新建 */NEW ,/* 可运行状态 */RUNNABLE ,/* 阻塞状态 */BLOCKED ,/* 无限等待状态 */WAITING ,/* 计时等待 *//* 终止 */TERMINATED;// 获取当前线程的状态通过源码我们可以看到Java中的线程存在6种状态,每种线程状态的含义如下。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 397

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

面试前“啃完”这份Java架构全栈知识点,金九银十过五关斩六将!

这些Java技术栈整理成册(包括:JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算),对你的面试大有帮助,让你offer到手,高薪也有!JAVA序列化(创建可复用的Java对象)...

m0_73256420的博客 167

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

金九银十已过,腾讯T4复盘2020年最全999道Java岗必备面试题答案

前言 今年并没有“金三银四”,但是马上又准备迎接金九银十了,你是否还在寻找没有“996”的公司,或者你在面试上面摘了跟头?准备了体体面面的自我介绍,败在了技术深度上;又或者技术知识背得完完全全,却输在了面试技巧。 Java集合/泛型面试题 1、ArrayLi st和1inkedList的区别 2、HashMap和HashT abl e的区别 3、Collecti on包结构,与Collections的区别 4、泛型常用特点(待补充) 5、说说List, Set, Map三者的区别.

weixin_50666791的博客 367

2020疫情年,程序员在金九银十期间该如何抉择?

疫情年,金九银十会有影响么? 年初期间的“足不出户”是我们每天的一个状态,疫情肆虐的今天,对我们的学习、工作、生活等各个方面都造成了很严重的负面影响,对于一个拥有房贷车贷的普通上班族来说,更是“难上加难”。很多人想要在这个期间找工作、跳槽,但根据现在这种情景,似乎一切都变得未知了起来。 现阶段,很多码农都返回到各自的岗位中了,但对于金九银十期间,想要跳槽或找工作的朋友来说,心目中最大的困惑就是:现在疫情肆虐,那么今年的“金九银十”到底还能不能照常进行呢? 实际上,由于疫情,各大行业都会受到影响,但..

AI乔治 876

Java多线程基础知识总结

<-----------------------------------------廖雪峰学Java-----------------------------------------> 目录1. 多线程基础知识2. 创建多线程3. 线程状态4. 中断线程5. 守护线程6. 线程同步7. 同步方法8. 死锁9. 使用wait和notify10. 使用ReentrantLock11. 使用Condition12. 使用ReadWriteLock13. 使用StampedLock14. 使用Concu

Pinkgranite86的博客 2721

面试多线程八股文十问十答第二期

面试必备八股文!内容包含:Java基础、Java框架、Git命令、JVM、多线程、消息队列、微服务、Linux、数据库、Redis缓存、算法等等。

qq_67358181的博客 1381

【Java基础知识8】多线程与并发

介绍多线程之前要介绍线程,而介绍线程则离不开进程1.进程在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。

阿志的博客 1367

Java多线程基础知识

这是我再次学习多线程知识的一个总结,对于刚刚接触的学习者是比较友好易懂的,便于快速的理解和掌握。

gldzzznb的博客 3544

java多线程基础知识-电子时钟

java多线程基础知识简单应用-电子时钟 参考文档《java语言程序设计》-13章多线程实现电子时钟 首先是继承Thread类实现多线程:这段程序可以初步了解线程的“同时执行”,运行可以发现每次运行的结果都是不同的。 Threads.javapackage project1_Thread; public class Threads { public static void main(

独恋幽兰的专栏 4445

Java多线程--基础知识

本文介绍Java多线程的基础知识。包括:多线程同步的实现方式,死锁产生的条件,如何避免死锁。 多线程同步的方案 方式 优点 缺点 使用场景 synchronized 使用简单;CPU占用低 响应缓慢(并发性能差);不灵活。 并发量低;大的代码块 同步方法/代码块 并发集合(List,Map) 例:ConcurrentHashMap等 并发性能高 ...

IT利刃出鞘的博客 3845

Java中的多线程基础知识

JavaSE回顾-多线程基础知识整合 多线程 基本概念 程序(program) 进程(process) 线程(thread) Java中的线程 多线程的用处 时间片 并行和并发 同步和异步 临界区 阻塞和非阻塞 问题引入 多线程的实现方式 方式一: 继承Thread类 方式二:实现Runnable接口(常用,优点多) 为什么实例效果不明显? 多线程的两种实现方式的区别 匿名内部类实现线...

胡啊呦的博客 460

【java】多线程基础知识

就绪状态(Runnable):调用对象的start(),使线程从新建状态过渡到就绪状态。运行状态:在就绪队列中排队的线程获取了cpu的使用权,就处于运行状态cpu给线程服务,就是要执行线程的run()。编写一个类,实现一个接口java.lang.Runnable,实现接口中的run()方法,将一个线程完成特定任务。引出:当多个线程同时访问一个资源时如变量,就称这个资源叫做临界资源,临界资源被访问时,会产生一些问题。4.死亡状态:如果run()执行结束,或者在执行的过程出现异常或错误,线程处于死亡状态。

Yihong1833100198的博客 1390
上一篇: Java基础知识(八)--异常
下一篇: Java基础知识(十一)--多线程
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值