iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中多线程同步的原理是什么
  • 186
分享到

Java中多线程同步的原理是什么

2023-06-17 12:06:42 186人浏览 薄情痞子
摘要

Java中多线程同步的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、线程的先来后到我们来举一个Dirty的例子:某餐厅的卫生间很小,几乎只能容纳一个人如厕。为了保

Java中多线程同步的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、线程的先来后到

我们来举一个Dirty的例子:某餐厅的卫生间很小,几乎只能容纳一个人如厕。为了保证不受干扰,如厕的人进入卫生间,就要上房门。我们可以把卫生间想象成是共享的资源,而众多需要如厕的人可以被视作多个线程。假如卫生间当前有人占用,那么其他人必须等待,直到这个人如厕完毕,打开房门走出来为止。这就好比多个线程共享一个资源的时候,是一定要分出先来后到的。

有人说:那如果我没有这道门会怎样呢?让两个线程相互竞争,谁抢先了,谁就可以先干活,这样多好阿?但是我们知道:如果厕所没有门的话,如厕的人一起涌向厕所,那么必然会发生争执,正常的如厕步骤就会被打乱,很有可能会发生意想不到的结果,例如某些人可能只好被迫在不正确的地方施肥……

正是因为有这道门,任何一个单独进入如厕的人都可以顺利的完成他们的如厕过程,而不会被干扰,甚至发生以外的结果。这就是说,如厕的时候要讲究先来后到。

那么在Java 多线程程序当中,当多个线程竞争同一个资源的时候,如何能够保证他们不会产生“打架”的情况呢?有人说是使用同步机制。没错,像上面这个例子,就是典型的同步案例,一旦***位开始如厕,则第二位必须等待***位结束,才能开始他的如厕过程。一个线程,一旦进入某一过程,必须等待正常的返回,并退出这一过程,下一个线程才能开始这个过程。

这里,最关键的就是卫生间的门。其实,卫生间的门担任的是资源锁的角色,只要如厕的人锁上门,就相当于获得了这个锁,而当他打开锁出来以后,就相当于释放了这个锁。

也就是说,多线程的线程同步机制实际上是靠锁的概念来控制的。那么在Java程序当中,锁是如何体现的呢?

让我们从JVM的角度来看看锁这个概念:

在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:

1)保存在堆中的实例变量

2)保存在方法区中的类变量

这两类数据是被所有线程共享的。(程序不需要协调保存在Java 栈当中的数据。因为这些数据是属于拥有该栈的线程所私有的。)

在java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。

对于对象来说,相关联的监视器保护对象的实例变量。

对于类来说,监视器保护类的类变量。(如果一个对象没有实例变量,或者一个类没有变量,相关联的监视器就什么也不监视。)

为了实现监视器的排他性监视能力,java虚拟机为每一个对象和类都关联一个锁。代表任何时候只允许一个线程拥有的特权。线程访问实例变量或者类变量不需锁。

但是如果线程获取了锁,那么在它释放这个锁之前,就没有其他线程可以获取同样数据的锁了。(锁住一个对象就是获取对象相关联的监视器)

类锁实际上用对象锁来实现。当虚拟机装载一个class文件的时候,它就会创建一个java.lang.Class类的实例。当锁住一个对象的时候,实际上锁住的是那个类的Class对象。

一个线程可以多次对同一个对象上锁。对于每一个对象,java虚拟机维护一个加锁计数器,线程每获得一次该对象,计数器就加1,每释放一次,计数器就减 1,当计数器值为0时,锁就被完全释放了。

java编程人员不需要自己动手加锁,对象锁是java虚拟机内部使用的。

在java程序中,只需要使用synchronized块或者synchronized方法就可以标志一个监视区域。当每次进入一个监视区域时,java 虚拟机都会自动锁上对象或者类。

看完上述内容,你们掌握Java中多线程同步的原理是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Java中多线程同步的原理是什么

本文链接: https://www.lsjlt.com/news/289133.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中多线程同步的原理是什么
    Java中多线程同步的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、线程的先来后到我们来举一个Dirty的例子:某餐厅的卫生间很小,几乎只能容纳一个人如厕。为了保...
    99+
    2023-06-17
  • java 中多线程的原理是什么
    今天就跟大家聊聊有关java 中多线程的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.基本概念程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一...
    99+
    2023-06-20
  • java中多线程的原理是什么
    java中多线程的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据...
    99+
    2023-06-14
  • java多线程的原理是什么
    本篇内容介绍了“java多线程的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本教程操作环境:windows7系统、java10版...
    99+
    2023-06-30
  • Java多线程同步实现的方式是什么
    这篇文章主要讲解了“Java多线程同步实现的方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程同步实现的方式是什么”吧!给我一把锁,我能创造一个规矩很多人都知道,在Jav...
    99+
    2023-06-17
  • Java多线程之ThreadLocal的原理是什么
    今天小编给大家分享一下Java多线程之ThreadLocal的原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、什...
    99+
    2023-07-06
  • Java多线程之线程同步
    volatile 先看个例子 class Test { // 定义一个全局变量 private boolean isRun = true; // 从主线程调...
    99+
    2024-04-02
  • Java中多线程同步类 CountDownLatch
    在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java提供了一个多线程同步辅助类,可以完成此类需求:类中常见的方法:其中构造方法:CountDownLatch(int count) 参数count是计数器,一般用要执行线程的...
    99+
    2023-05-31
    countdownlatch ava tc
  • Java中怎么实现多线程同步
    今天就跟大家聊聊有关Java中怎么实现多线程同步,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。让我们从JVM的角度来看看锁这个概念:在Java程序运行时环境中,JVM需要对两类线程共...
    99+
    2023-06-17
  • Java中同步机制的底层原理是什么
    Java中同步机制的底层原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。同步机制源码初探ReentrantLock是我们常用的一种可重入互斥锁,是synchroni...
    99+
    2023-06-16
  • java多线程异步处理的方法是什么
    Java多线程异步处理的方法有几种: 使用Thread类或Runnable接口创建新的线程,然后调用start()方法启动线程,...
    99+
    2024-04-02
  • django多线程异步任务的实现原理是什么
    Django多线程异步任务的实现原理是基于Python的内置模块`threading`和Django的任务队列模块`django-q...
    99+
    2023-09-26
    django
  • Java多线程怎么同步优化
    这篇文章给大家分享的是有关Java多线程怎么同步优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存。加入高速缓存带...
    99+
    2023-06-15
  • Java中怎样实现多线程同步
    本篇文章给大家分享的是有关Java中怎样实现多线程同步,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。不同步时的代码Bank.java  package&nb...
    99+
    2023-06-17
  • Python中线程同步的作用是什么
    Python中线程同步的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假如两个线程对象t1和t2都要对数值num=0进行增1运算,那么t1和t2都各对num修改1...
    99+
    2023-06-17
  • c语言多线程同步机制是什么
    C语言中的多线程同步机制是用于确保多个线程之间互斥访问共享资源的一种机制。主要包括互斥锁(Mutex)、条件变量(Condition...
    99+
    2023-08-18
    c语言
  • Java中线程池的实现原理是什么
    这篇文章给大家介绍Java中线程池的实现原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。线程池是什么?我们可以利用java很容易创建一个新线程,同时操作系统创建一个线程也是一笔不小的开销。所以基于线程的复用,就...
    99+
    2023-05-31
    java 线程池 ava
  • Java中实现线程池的原理是什么
    Java中实现线程池的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。01.***制线程的缺点多线程的软件设计方法确实可以***限度地发挥多核处理器的计算能力,提高生产...
    99+
    2023-06-16
  • Java如何实现多线程、线程同步
    这篇文章主要介绍了Java如何实现多线程、线程同步的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java如何实现多线程、线程同步文章都会有所收获,下面我们一起来看看吧。1 多线程1.1 进程进程:是正在运行的程...
    99+
    2023-06-30
  • Java中线程中断机制的原理是什么
    本篇文章为大家展示了Java中线程中断机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Thread.interrupt真的能中断线程吗在平时的开发过程中,相信都会使用到多线程,在使用多...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作