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.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或...
在更新字段时会锁表,尤其带默认值的更新会锁整个表,同时会造成引用其的过程函数视图失效,而需重新编译; 在更新过程函数视图同样会造成引用其的过程函数视图失效,通常情况下,当功能调用失效的过程函数会自动编译,但是...
15. 发布对象时,需要避免对象逸出,例如在构造函数中,开启线程,并将自身对象传入线程,造成引用传递。 16. 使用ThreadLocal变量可以确保线程封闭性,例如hibernate openSessionInView机制和jdbc的connection机制...
* 修饰类:表明该类不可被继承,类中的所有成员方法都隐式的被指定为 final 方法,成员变量则可以定义为 final,也可以不定义为 final。 * 修饰方法:用 final 修饰方法的原因有两个:锁定这个方法,防止任何继承类...
QHierarchy是一个Unity3D的编辑器...– 图标顺序可以更改 – 以树的形式显示GameObjects的列表 – 添加右缩进的选项(如果您使用其他插件将另一个图标添加到层级窗口,则很有用) – 任何功能都可以禁用 – 包含源代码
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。 授予系统...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...
为空,但是不能修改 7.2.3 对象定义 1) 父接口是IUnknown接口 2) 在对象内添加函数,函数定义必须 是返回 HRESULT. HRESULT是32位整数,返回函数是否 执行成功,需要使用 SUCCESSED和 FAILED宏来判断返回值.
wait()是Object类的方法,对此对象调用了wait方法导致本线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步,在什么情况下分别使用? ...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、...
修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法...
变量:在 Python 中,变量是指向对象的引用。Python 中有多种数据类型,包括整型、浮点型、字符串型、列表、元组、字典等。 数据类型:Python 中的数据类型可以分为两类:基本类型和复杂类型。基本类型包括整型、...
在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出DDL语句和进行各种修改,重建工作。定位到某一类对象上,这列对象允许的操作都会自动列...
修改BUG:VCL相关支持库部分组件在修改个别属性或调用个别方法后不可见,并改进了Delphi版本的支持库SDK。 15. 修改BUG:高级表格在列类型为数值型时,添加新行且省略标题的情况下,会导致程序异常。 16. 修改BUG...
final:可加可不加,加了可以保证不可修改,且提供获取效率 3. 提供一个public修饰的方法getInstance给外部返回一个对象 4. 单例模式获取方式: 1. 饿汉模式:预加载模式 (优化方式:...
实际上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表...
文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...
在一小时内学会 C#。使用例程,简单却完整的探索 C# 语言的构造和特点。...在不安全上下文中,你可以插入不安全代码,如 C++ 的指针等。参见以下代码: 复制内容到剪贴板 代码: public unsafe MyFunction...
(`==` 比较对象的引用,`equals` 比较对象的值) 3. `final` 在 Java 中有什么作用?(修饰变量、方法、类,表示不可变) 4. Java 中的 `Math.round(-1.5)` 等于多少?(-1) 5. `String` 属于基础的数据类型吗?...