• 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

  • 相关阅读:
    Python数据类型的可变与不可变
    垃圾回收机制详解、运算符和格式化输出
    Python变量详解
    计算机硬件的基本组成-大框架的建立
    Python语言介绍
    MySQL 安装教程
    Java中遍历Map对象的方式
    判断字段的值是否为空
    Java中判断某一字符串是否包含数字、字母和中文
    把字符串字节数组写入文件
  • 原文地址:https://www.cnblogs.com/yidaxia/p/4086085.html
Copyright © 2020-2023  润新知