`

不可以更改对象锁的引用

    博客分类:
  • java
阅读更多
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author max
 * 可以修改锁的内容,但不能修改锁的引用
 */
public class TestNotify{
    static Boolean lock = true;
//    static  A lock = new A(1);
    static Boolean condition = true;
    public static void main(String[] args) throws Exception{
        new TestThread().start();
        new TestThread().start();
        Thread.sleep(1000);
        System.out.println("Doing something");
        synchronized(lock){
//            Boolean b = lock;  //这样就可以了
//            lock.setA(0);      //语句1  改成condition ,赋值改变了lock的引用
            lock = false;
//            b.notifyAll();     //语句2
            lock.notifyAll();
        }
    }
}

class TestThread extends Thread{
    public void run(){
        synchronized(TestNotify.lock){
            while(TestNotify.lock){
//            while(TestNotify.lock.getA() == 1){    //改成condition
                try {
                    TestNotify.lock.wait();
                } catch (InterruptedException ex) {
                    Logger.getLogger(TestThread.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            System.out.println(getId());
        }
    }
}

class A{
    int a;
    public A(int i){
        a = i;
    }

    public void setA(int i){
        a = i;
    }

    public int getA()
    {
        return a;
    }
}

 

分享到:
评论

相关推荐

    面向对象数据库论文

    OID可以作为引用其他对象的基础,类似于关系数据库中的外键。 2. **对象链接**:OODB支持对象间的直接链接,通过OID实现对象之间的关联。 3. **事务管理**:为保证数据一致性,OODB支持ACID特性(原子性、一致性、...

    03.Java对象初始化1

    优缺点:句柄引用,当对象实例发生改变的时候,只需要改掉句柄对实例对象物理地址的引用即可,修改比较方便与快捷缺点,但是确定是对象的分配比较频繁,因此获取对象是一个频繁的动作,使用直接指针访问,这样的性能...

    快帮忙啊

    9. **多线程中的引用对象**:在多线程环境中,必须谨慎处理引用对象,因为多个线程可以同时修改同一个对象,可能导致数据不一致。为此,需要使用锁或其他同步机制来确保线程安全。 10. **垃圾收集(GC)优化**:...

    Jvm对象内存分配理解

    在 Hotspot 虚拟机中,对象头包括两个部分信息,第一部分用于存储对象自身的运行数据,如哈希码、gc 分代年龄、锁状态标志、线程持有的锁、偏向线程 id、偏向时间搓等。对象的另一部分是类型指针,即对象指向它的类...

    redis源码阅读笔记(7)——对象

    不过,Redis在多线程环境下并未使用锁来保护引用计数,而是采用了乐观锁策略,通过检查版本号来避免并发修改问题。 4. 垃圾回收: Redis的垃圾回收机制主要依赖引用计数。当对象的引用计数降为0,且无其他指针指向...

    当析构函数遇到多线程── C++ 中线程安全的对象回调 PDF

    此外,`boost::weak_ptr`是一种不增加引用计数的智能指针,它可以持有指向`shared_ptr`所管理的对象的指针,从而避免了循环引用问题。 #### 10. 应用到Observer模式 在Observer模式中,使用`boost::shared_ptr`来...

    JAVA对象模块.rar

    它们可以访问和修改对象的属性。如`displayDetails()`方法,用于显示对象的详细信息。 5. 构造器(Constructor): 构造器是一种特殊的方法,用于初始化新创建的对象。当使用`new`关键字创建对象时,会自动调用...

    对象由生到死的一些过程.doc

    4. **引用存储**:`astore`指令将栈顶的对象引用存储到局部变量表中,使得我们可以访问这个新创建的对象。 **对象定位** 对象定位有两种主要方式: 1. **直接指针定位**:HotSpot JVM采用这种方式,对象的引用...

    ADO对象操作Access数据库关键技术.doc

    总结来说,ADO对象模型为Access数据库的编程提供了强大且灵活的工具,通过熟练掌握Connection、Command和Recordset对象,以及它们的集合对象,开发者可以高效地实现数据库的各种操作,包括数据的读取、修改、添加和...

    超级有影响力霸气的Java面试题大全文档

     java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或...

    winfrom挂机锁程序源码

    描述中提到"该资源来自互联网",意味着这个源码可能是开源的或者由社区共享的,用户可以从网络上获取并学习、修改或使用。由于是源代码形式,对于开发者来说,这是一个很好的学习和实践C# Winform应用程序设计和挂机...

    Java线程不安全分析,同步锁和Lock机制,哪个解决方案更好.docx

    其中`lockObject`称为同步锁,它是一个对象引用。在这个例子中,可以使用`Balloon`实例自身作为锁对象。 ##### 2. 同步方法 同步方法也是通过`synchronized`关键字来实现的,但是它是直接作用于整个方法体的。当一...

    Java基础面试专题1

    - notify(), notifyAll(), wait(): 对象锁相关,用于多线程同步。 - toString(): 返回对象的字符串表示。 Java 引用的四种类型: 1. 强引用:最普通的引用,不会被GC回收,除非显式设为null。 2. 软引用:内存不足...

    委托+事件+多线程+排他锁的c#例子

    在多线程环境下,如果多个线程尝试同时访问和修改同一资源,可能会导致数据不一致的问题。Mutex通过锁定资源,确保了在给定时间内,只有获得锁的线程才能访问该资源。在我们的例子中,可能有一个或多个线程需要共享...

    内存溢出及锁表问题的分析与解决.doc

    List、MAP 等集合对象会始终存有对对象的引用,使得这些对象不能被 GC 回收。 第四步,使用内存查看工具动态查看内存使用情况。某个项目上线后,每次系统启动两天后,就会出现内存溢出的错误。这种情况一般是代码中...

    C#线程锁的应用

    1. 访问共享资源:例如,当多个线程需要修改同一个全局变量或数据结构时,使用线程锁可以避免数据不一致性。 2. 控制并发操作:在数据库连接、文件操作或其他I/O密集型任务中,限制同时执行的线程数量可以提高系统...

    WEB开发 之 ASP Application 对象(2).docx

    2. `Application_OnStart`:在创建第一个新的会话之前,即首次引用`Application`对象时,触发这个事件。开发者通常会在该事件处理程序中初始化全局变量或设置应用程序级别的配置。 通过`Application`对象,开发者...

    c#挂机锁(内含源码)

    挂机锁,又称自旋锁,它的设计目的是为了在等待资源释放时,不让线程立即进入睡眠状态,而是让其在一个循环中不断检查资源是否已经可用。这种策略在某些特定情况下可以提高系统的响应速度,比如当锁被释放的可能性...

    20230406经典java面试题

    synchronized 不需要手动获取锁和释放锁,而 Lock 需要自己加锁和释放锁。 6.抽象类和抽象方法 抽象类不一定要有抽象方法,抽象类可以没有抽象方法。 7.强引用、软引用、弱引用、虚引用 强引用是普通的对象引用...

Global site tag (gtag.js) - Google Analytics