当前位置: 代码迷 >> J2ME >> 新手请教多线程的有关问题
  详细解决方案

新手请教多线程的有关问题

热度:8181   发布时间:2013-02-25 21:38:26.0
新手请问多线程的问题
问题一:
new Thread(this).start(); 启动这个线程后,是不是没有立即执行,而是执行了下面的 a.foo(b);
问题二:
当进程运行至a.foo(b)后,为什么还能跳出来到另外一个进程?方法是synchronized,为什么可以跳出?

以上是根据运行结果提出的疑问:


Java code
class A{    synchronized void foo(B b)    {        String name=Thread.currentThread().getName();        System.out.println(name + " entered A.foo()");        try{Thread.sleep(1000);} catch(Exception e){System.out.println(e.toString());}        System.out.println(name + " trying to call B.last()");        b.last();    }         synchronized void last()    {        System.out.println("inside A.last");    }}class B{    synchronized void bar(A a)    {        String name=Thread.currentThread().getName();        System.out.println(name + " entered B.bar()");        try{Thread.sleep(1000);} catch(Exception e){System.out.println(e.toString());}        System.out.println(name +" trying to call A.last()");        a.last();    }        synchronized void last()    {        System.out.println("inside B.last");    }}class Deadlock implements Runnable{    A a=new A();    B b=new B();        Deadlock()    {        Thread.currentThread().setName("MainThread");        new Thread(this).start();        a.foo(b);        System.out.println("back in Mian Thread");    }        public void run()    {        Thread.currentThread().setName("RacingThread");        b.bar(a);        System.out.println("back in Other Thread");    }        public static void main(String[] args)    {            System.out.println("");            new Deadlock();    }        }



------解决方案--------------------------------------------------------
synchronized要锁相同一个对象才行
在非静态方法用synchronized相当于锁this
你这两个方法synchronized锁得是不同的this
  相关解决方案