如:
class Threadu{
 private Object obj=new object();
 public void tun(){
 synchronized(obj){
  system.out.println("---");
   }
  }
}

synchronized(obj){//里面的参数obj有什么作用?起到什么同步的效果?或者同步了?obj中的什么?还有.如何写一个简单的垃圾回收测试例子:

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【bangyulin】截止到2008-07-01 16:26:37的历史汇总数据(不包括此帖):
    发帖数:2                  发帖分:40                 
    结贴数:1                  结贴分:20                 
    未结数:1                  未结分:20                 
    结贴率:50.00 %            结分率:50.00 %            
    楼主加油
      

  2.   

    synchronized(obj){...}
    意味着:当多个线程执行到这段代码时,每个线程必须获得 obj 这个对象之后才能继续执行花括号中的内容,执行完后再释放 obj。这样就避免多个线程同时操作一个对象产生的混乱。
      

  3.   

    如果此句抢到时间片synchronized(obj)会将obj加锁其它用到该资源的线程都将阻塞
      

  4.   

    synchronized(obj){
        //对 obj 操作的语句
    }
    这种用法叫同步块。
    当线程执行到同步块在进入同步块内执行块内语句之前,首先线程要获取 obj 引用的对象的同步锁(同步锁每个对象都有,是在 Object 类中定义的),当线程发现此对象同步锁已被其它线程取走了时此线程会被阻塞(线程执行暂停)直到拥有此同步锁的线程释放同步锁并且被此线程抢到后它才会继续执行同步块内代码。当然如果发现 obj 的同步锁还没被取走,此线程不会被阻塞。
    同步机制可以防止两个或两个以上的线程同时操作同一个对象造成对象内部的状态不一致。
      

  5.   

    在java语言中,其实垃圾回收已经由虚拟机自动完成了,程序员根本不需要考虑的。不过在java.lang.System类中有一个方法gc(),可以调用这个方法,用于用于建议虚拟机进行回收。
      

  6.   

    synchronized(obj){ 
      system.out.println("---"); 保证多个线程不会同时执行里面的代码。
      

  7.   

    class Tc { private String name; public Tc(String name) {
    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 回收的条件
    }}