黑马程序员技术交流社区

标题: 有能解释的吗 [打印本页]

作者: @ne_pie尒ce    时间: 2013-11-8 07:40
标题: 有能解释的吗
下面两个方法同步吗?
        class Test
{
synchronized static void sayHello3()
                {
               
                }       
       
                synchronized void getX(){}
}


作者: 黄炳期    时间: 2013-11-8 08:16
同步函数默认的锁是this,同步代码块要指定锁,不一定是this。
所以不一定同步
作者: 赵许星    时间: 2013-11-8 09:31
还真不一定同步,一个是静态,另一个是在需要实例化后才有this的非静态方法,两个的同步锁就不一样,很难同步吧,若想定义线程同步非静态方法,参看
/**
* 测试java多线程的同步,使用5个线程调用载体方法。
*
* 测试用例1:给载体方法加上synchronized修饰词(如程序中)。
* 结果:载体方法被同步,每秒打印一条记录;
*
* 测试用例2:去掉载体方法的synchronized修饰词(请自己试下)。
* 结果:载体方法没有被同步,5条记录很快打印完。
*
* 结论:可想而知!给static方法添上synchronized修饰词,方法就被同步。
*/
public class TestSynchronized {
       
        public static void main(String args[]){
               
                // 开启5个线程调用载体方法
                TestSynchronized.mutilThreadInvoke(5);
        }
       
        /**
         * 同步的载体方法
         */
        public synchronized static void method(){
               
                try {
                        Thread.sleep(1000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                System.out.println("method print. time:"+System.currentTimeMillis());
        }
       
        /**
         * 多线程调用载体方法
         * @param n:调用线程的数目
         */
        public static void mutilThreadInvoke(int n){
               
                for(int i=0 ; i < n ; i++){
                        new Thread(
                                        new Runnable(){

                                                @Override
                                                public void run() {
                                                        // 调用载体方法
                                                        TestSynchronized.method();
                                                }
                                               
                                        }
                        ).start();
                }
        }
}





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