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

  • 相关阅读:
    .gitignore
    composer安装tp各版本(旧版本不能安装)
    教你用Fiddler在电脑上抓手机上的包
    EF 实现Mysql IN功能的两种方式
    C# foreach 底层原理分析及自定义 MyList
    VS2019 控制台程序调试, 报FatalExecutionEngineError错误
    服务器 IIS发布C# webapi网站报404
    C# 实现Get/Post请求
    VS2015 启动本地webapi项目 ,报503
    count(字段) 、count(主键 id)、 count(1)、count(*)
  • 原文地址:https://www.cnblogs.com/yidaxia/p/4086085.html
Copyright © 2011-2022 走看看