A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余威宏 中级黑马   /  2013-5-27 19:05  /  1405 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余威宏 于 2013-5-30 08:08 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

正序浏览
不明白你表达的意思!

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");
        }

}
回复 使用道具 举报
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
回复 使用道具 举报
本帖最后由 吴刚—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()
{
}
}
);

从上面的代码可以看出,如果你的监听代码是这样写的话,你的两个同步方法的调用,并不会影响到其他非同步方法的调用,如果你还有不懂的地方,可以再仔细考虑一下自己的代码,并且看一下张孝祥老师的多线程视频

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
       问题中你提到了对象,你是用继承Thread的方法创建的线程,每一个线程对象都有自己的run函数,互不影响,何来的同步?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马