zoukankan      html  css  js  c++  java
  • java多线程下的所的概念

    锁和synchronized关键字
         为了同步多线程,Java语言使用监视器(monitors),一种高级的机制来限定某一 时刻只有一个线程执行一段受监视器保护的代码。监视器的行为是通过锁来实现的,每一个对象都有一个锁。
        每个线程都有一个工作内存,在里面存放从所有线程共享的主内存里拷贝来的变量。为了访问一个共享的变量,一个线程通常先要获得一个锁并刷新它的工作内存,这将共享的值从主内存被拷贝到工作内存。当线程解锁时将会把工作内存里的值写回主内存。
    &n bsp;   一个线程能多次获得对象的锁。也就是说,一个synchronized方法调用了另一个synchronized方法,而后者又调用了另一synchronized方法,诸如此类。JVM会跟踪对象被上锁的次数。如果对象没有被锁住,那么它的计数器应该 为零。当线程第一次获得对象的锁时,计数器为一。线程每获一次对象的锁,计数器就加一。当然,只有第一次获得对象锁的线程才能多次获得锁。线程每退出一个synchronized方法,计数器就减一。等减到零了,对象也就解锁了,这时其它线程就可以使用这 个对象了。
        此外每个类还有一个锁(它属于类的Class对象),这样当类的synchronized static方法读取static数据的时候,就不会相互干扰了。
        线程之间不直接交互,它们只通过主内存进行交流。

        从J2SE 1.5开始,Java有了Lock接口,将使锁的概念更清晰,使线程同步的控制更容易。使用synchronized,你无法控制锁的释放,而使用Lock接口,你将可以lock(),也可以随你需要进行unlock()。
  • 相关阅读:
    VS 无法命中断点解决
    sharepoint 什么开始系列呢?从哪里开始写呢?
    sqlserver 登录名与用户的关系
    Exchange 开启模拟用户
    Exchange(DC服务器开启防火墙,造成的问题)
    Exchange 2010 RPC 揭秘
    二维码生成
    【转】使用 Entity Framework + ListView + DataPager 实现数据分页
    24款超实用的Web 2.0风格翻页代码
    精心收集的jQuery常用的插件1000
  • 原文地址:https://www.cnblogs.com/wcyBlog/p/3928741.html
Copyright © 2011-2022 走看看