黑马程序员技术交流社区

标题: 来问大家一个问题,谢谢。 [打印本页]

作者: 余威宏    时间: 2013-5-27 19:05
标题: 来问大家一个问题,谢谢。
本帖最后由 余威宏 于 2013-5-30 08:08 编辑

当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗?

有点不是太清楚,请大家详解一下,最好能够举几个例子,能够看得明白点。

作者: 821728010    时间: 2013-5-27 19:15
       问题中你提到了对象,你是用继承Thread的方法创建的线程,每一个线程对象都有自己的run函数,互不影响,何来的同步?
作者: 吴刚—heima    时间: 2013-5-28 17:04
本帖最后由 吴刚—heima 于 2013-5-28 17:07 编辑

  我大致看了一下你的问题,虽然感觉问题好像提的有点模糊,你说的同步方法是不是指的是两个同步线程调用时产生的方法,比如说线程1和线程2同步,那么他们各自有自己的一个输出流方法,比如说线程1打印23线程2打印12,这样的同方法。
   如果是这样的话,那我告诉你,在两个同步线程中同样能够调用其他非同步的对象方法:[code]  
    new Thread(new Runnable()
   {
    synchronized  function1(this)
     {
   Thread.sleep(100);
System.out.println("13");
      }
    }
);

new Thread(new Runnable()
{
   synchronized funciton2(this)
   {
      Thread.sleep(100);
        System.out.println("23");
    }
funciton3()
{
}
}
);

从上面的代码可以看出,如果你的监听代码是这样写的话,你的两个同步方法的调用,并不会影响到其他非同步方法的调用,如果你还有不懂的地方,可以再仔细考虑一下自己的代码,并且看一下张孝祥老师的多线程视频
作者: 袁梦希    时间: 2013-5-29 17:14
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
作者: 李润根    时间: 2013-5-29 17:36
不明白你表达的意思!

public class Test01
{
        public static void main(String[] args)
        {
                new Thread(new Runnable()
                {
                        @Override
                        public void run()
                        {
                                Test01.sayHello();
                        }
                }).start();
        }
       
        public synchronized static void sayHello()
        {
                System.out.println("sayHello");
               
                try
                {
                        Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                        e.printStackTrace();
                }
               
                show();
        }
       
        public static void show()
        {
                System.out.println("show");
        }

}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2