`

不可以更改对象锁的引用

    博客分类:
  • 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;
    }
}

 

分享到:
评论

相关推荐

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

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

    关于更新字段,存储过程,函数等数据库对象的规定与说明

    在更新字段时会锁表,尤其带默认值的更新会锁整个表,同时会造成引用其的过程函数视图失效,而需重新编译; 在更新过程函数视图同样会造成引用其的过程函数视图失效,通常情况下,当功能调用失效的过程函数会自动编译,但是...

    java并发编程实践笔记资料.pdf

    15. 发布对象时,需要避免对象逸出,例如在构造函数中,开启线程,并将自身对象传入线程,造成引用传递。 16. 使用ThreadLocal变量可以确保线程封闭性,例如hibernate openSessionInView机制和jdbc的connection机制...

    Java-常见面试题.pdf

    * 修饰类:表明该类不可被继承,类中的所有成员方法都隐式的被指定为 final 方法,成员变量则可以定义为 final,也可以不定义为 final。 * 修饰方法:用 final 修饰方法的原因有两个:锁定这个方法,防止任何继承类...

    QHierarchy v4.3

    QHierarchy是一个Unity3D的编辑器...– 图标顺序可以更改 – 以树的形式显示GameObjects的列表 – 添加右缩进的选项(如果您使用其他插件将另一个图标添加到层级窗口,则很有用) – 任何功能都可以禁用 – 包含源代码

    java 面试题 总结

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

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。  授予系统...

    关于JAVA面试的100题及其答案

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

    VC++ COM组件开发相关实例

    为空,但是不能修改 7.2.3 对象定义 1) 父接口是IUnknown接口 2) 在对象内添加函数,函数定义必须 是返回 HRESULT. HRESULT是32位整数,返回函数是否 执行成功,需要使用 SUCCESSED和 FAILED宏来判断返回值.

    java面试题

    wait()是Object类的方法,对此对象调用了wait方法导致本线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步,在什么情况下分别使用? ...

    进销存系统文档作业例子

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、...

    达梦数据库_SQL语言手册

    修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法...

    110道Python面试题:.pdf

    变量:在 Python 中,变量是指向对象的引用。Python 中有多种数据类型,包括整型、浮点型、字符串型、列表、元组、字典等。 数据类型:Python 中的数据类型可以分为两类:基本类型和复杂类型。基本类型包括整型、...

    Toad 使用快速入门

    在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出DDL语句和进行各种修改,重建工作。定位到某一类对象上,这列对象允许的操作都会自动列...

    易语言程序免安装版下载

    修改BUG:VCL相关支持库部分组件在修改个别属性或调用个别方法后不可见,并改进了Delphi版本的支持库SDK。 15. 修改BUG:高级表格在列类型为数值型时,添加新行且省略标题的情况下,会导致程序异常。 16. 修改BUG...

    day020-继承加强和设计模式代码和笔记.rar

    final:可加可不加,加了可以保证不可修改,且提供获取效率 3. 提供一个public修饰的方法getInstance给外部返回一个对象 4. 单例模式获取方式: 1. 饿汉模式:预加载模式 (优化方式:...

    内存管理内存管理内存管理

    实际上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表...

    操作系统(内存管理)

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    在一小时内学会 C#(txt版本)

    在一小时内学会 C#。使用例程,简单却完整的探索 C# 语言的构造和特点。...在不安全上下文中,你可以插入不安全代码,如 C++ 的指针等。参见以下代码: 复制内容到剪贴板 代码: public unsafe MyFunction...

    200个Java经典面试题总结附带答案.docx

    (`==` 比较对象的引用,`equals` 比较对象的值) 3. `final` 在 Java 中有什么作用?(修饰变量、方法、类,表示不可变) 4. Java 中的 `Math.round(-1.5)` 等于多少?(-1) 5. `String` 属于基础的数据类型吗?...

Global site tag (gtag.js) - Google Analytics