zoukankan      html  css  js  c++  java
  • 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

    分两种情况

             1):进入此对象的非同步方法

                  答案:可以

             2):进入此对象的同步方法

                 答案:不可以

    第一种情况原代码

    /**
     * 
     */
    package thread;
    
    
    /**
     * @author Administrator
     *
     */
    public class TestClass {
        /**
         * @param args
         */
        public static void main(String[] args) {
            TestClass tc = new TestClass();
            Thread1 t1 = tc.new Thread1(tc);
            t1.start();
            Thread2 t2 = tc.new Thread2(tc);
            t2.start();
            
        }
    
        class Thread1 extends Thread{
            TestClass tc = null;
            public Thread1(TestClass tc) {
                this.tc = tc;
            }
            @Override
            public void run() {
                tc.method1();
            }
        }
        class Thread2 extends Thread{
            TestClass tc = null;
            public Thread2(TestClass tc) {
                this.tc = tc;
            }
            @Override
            public void run() {
                // TODO Auto-generated method stub
                tc.method2();
            }
        }
        
        public synchronized void method1(){
            System.out.println("method1");
            try {
                Thread.sleep(1000*10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        
        }
        public  void method2(){
            System.out.println("method2");
        }
    }

    第二种情况原代码

    /**
     * 
     */
    package thread;
    
    
    /**
     * @author Administrator
     *
     */
    public class TestClass {
        /**
         * @param args
         */
        public static void main(String[] args) {
            TestClass tc = new TestClass();
            Thread1 t1 = tc.new Thread1(tc);
            t1.start();
            Thread2 t2 = tc.new Thread2(tc);
            t2.start();
            
        }
    
        class Thread1 extends Thread{
            TestClass tc = null;
            public Thread1(TestClass tc) {
                this.tc = tc;
            }
            @Override
            public void run() {
                tc.method1();
            }
        }
        class Thread2 extends Thread{
            TestClass tc = null;
            public Thread2(TestClass tc) {
                this.tc = tc;
            }
            @Override
            public void run() {
                // TODO Auto-generated method stub
                tc.method2();
            }
        }
        
        public synchronized void method1(){
            System.out.println("method1");
            try {
                Thread.sleep(1000*10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        public synchronized void method2(){
            System.out.println("method2");
        }
    }
  • 相关阅读:
    001.Kubernetes简介
    DOCKER学习_018:Docker-Compose文件简介
    DOCKER学习_017:Docker-Compose介绍
    DOCKER学习_016:Docker镜像仓库和HARBOR的简单安装和管理
    DOCKER学习_015:Docker网络补充
    接口漏洞
    Shodan搜索引擎在信息搜集中的应用
    Google在情报搜集中的基础技巧
    数据抓包分析基础
    文件上传之图片木马的学习
  • 原文地址:https://www.cnblogs.com/azhqiang/p/4610251.html
Copyright © 2011-2022 走看看