如:
class Threadu{
private Object obj=new object();
public void tun(){
synchronized(obj){
system.out.println("---");
}
}
}
中
synchronized(obj){//里面的参数obj有什么作用?起到什么同步的效果?或者同步了?obj中的什么?还有.如何写一个简单的垃圾回收测试例子:
class Threadu{
private Object obj=new object();
public void tun(){
synchronized(obj){
system.out.println("---");
}
}
}
中
synchronized(obj){//里面的参数obj有什么作用?起到什么同步的效果?或者同步了?obj中的什么?还有.如何写一个简单的垃圾回收测试例子:
解决方案 »
- 刚开始学JAVA,请大家指点
- 如何停止IO进程?(代码有点多,但是狠简单地)
- 诚心求教,如何关闭JDBC中一个connection的所有resultset和statement
- 请提供ultraedit-32版本的序列号
- 关于solaris里jni的问题?
- jbuilder 的Design中列不出来控件了, 真是怪事!
- 用语句怎样实现 显示/隐藏 JComboBox的下拉框? 谢谢
- 刚过scjp,89%
- 有关Java中事件响应的一个问题。
- JAVA 流程控制语句 switch case
- 请问在表中加入JComboBox的选择,为什么出现在一次点击上box中的内容为上一次里的内容
- Driver does not support this function
楼主【bangyulin】截止到2008-07-01 16:26:37的历史汇总数据(不包括此帖):
发帖数:2 发帖分:40
结贴数:1 结贴分:20
未结数:1 未结分:20
结贴率:50.00 % 结分率:50.00 %
楼主加油
意味着:当多个线程执行到这段代码时,每个线程必须获得 obj 这个对象之后才能继续执行花括号中的内容,执行完后再释放 obj。这样就避免多个线程同时操作一个对象产生的混乱。
//对 obj 操作的语句
}
这种用法叫同步块。
当线程执行到同步块在进入同步块内执行块内语句之前,首先线程要获取 obj 引用的对象的同步锁(同步锁每个对象都有,是在 Object 类中定义的),当线程发现此对象同步锁已被其它线程取走了时此线程会被阻塞(线程执行暂停)直到拥有此同步锁的线程释放同步锁并且被此线程抢到后它才会继续执行同步块内代码。当然如果发现 obj 的同步锁还没被取走,此线程不会被阻塞。
同步机制可以防止两个或两个以上的线程同时操作同一个对象造成对象内部的状态不一致。
system.out.println("---"); 保证多个线程不会同时执行里面的代码。
super();
this.name = name;
System.out.println("对象" + this.name + "创建");
} protected void finalize() { //此方法会在GC销毁对象前被自动调用
System.out.println("对象" + this.name + "销毁,占用资源被GC回收");
}}public class Test { public static void main(String[] args) {
Tc t1 = new Tc("haha");
Tc t2 = new Tc("hihi");
//some code
t1 = null;
//main 方法执行完局部变量 t2 被释放 Tc("hihi") 也具备了被 GC 回收的条件
}}