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

  • 相关阅读:
    Go panic+defer+recover理解加使用
    golang atomic包的使用
    Mongo 锁的理解
    AudioManager(录音)
    SAXpraseHelper
    Density
    CustomDialog
    CustomScrollVeiw(双向滑动)
    tf的concat问题
    tensorflow的gpu版本错误
  • 原文地址:https://www.cnblogs.com/yidaxia/p/4086085.html
Copyright © 2011-2022 走看看