zoukankan      html  css  js  c++  java
  • java多线程浅谈

    当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

    分这几种情况:
        1.其他方法前是否加了synchronized关键字,如果没加,则能。
        2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
        3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
        4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。 

    为什么有这么多情况呢?这是由于java对象的锁机制引起的,java实现多线程是通过对象锁来实现的,一个对象只有一个锁,所以不管多少个线程调用一个对象中的方法,有且只有一个线程能够拥有该对象的锁,当一个线程调用这个对象的synchronized方法时,该对象即占用了该对象的锁,所以出现上面几种情况。

    在简答的说一下java中关于线程同步问题

    1、jvm内存的划分 :jvm简单的可以划分为:方法区、堆和栈 。方法区存放jvm初始化类的信息,类的Class类,静态方法与静态变量,方法区是为所有线程所共享的;堆中存放类实例化出的类的对象的信息,堆中的数据也是所有线程共享的。那么栈呢,jvm为每一线程创建一个栈,栈中的信息是相互独立的,所以即使多个线程同时执行一个对象的一个方法,方法中的局部变量也不会出现信息不一致问题。

    参见http://blog.csdn.net/kyfg27_niujin/article/details/7942006

  • 相关阅读:
    Datax streamreader json测试样例
    dbeaver 连接 elasticsearch 记录
    灾害链开发记录资料汇总
    mxgraph
    drawio www.diagrams.net 画图应用程序开发过程资料汇总
    neo4j学习记录
    GraphVis 图可视化分析组件
    D3学习记录
    Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
    记一次性能优化,单台4核8G机器支撑5万QPS
  • 原文地址:https://www.cnblogs.com/yidaxia/p/4086085.html
Copyright © 2011-2022 走看看