zoukankan      html  css  js  c++  java
  • 锁的使用_java_示例代码

    一:synchronized示例

      1、主类

    package locks;
    
    /**
     * @author chunxiaozhang
     * @date 2020/4/9 10:06
     * @desc
     */
    public class MainDemo {
    
        public static void main(String[] args) {
            final Peopele p = new Peopele ();
            final Peopele p2 = new Peopele ();
            //线程1
            new Thread ( new Runnable ( ) {
                @Override
                public void run() {
                    p2.speak_obj ();;
                }
            } ,"thread_1").start();
            //线程2
            new Thread ( new Runnable ( ) {
                @Override
                public void run() {
                    p.speak_static_void();
                }
            } ,"thread_2").start();
            //线程3
            new Thread ( new Runnable ( ) {
                @Override
                public void run() {
                    p.speak_static_void ();
                }
            } ,"thread_3").start();
        }
    }

      2、测试类

    package locks;
    
    /**
     * @author chunxiaozhang
     * @date 2020/4/9 11:05
     * @desc
     */
    public class  Peopele {
    
        private static int sta_num = 1;
        private int num = 1;
    
        //无锁部分
        public void speak() {
            System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
            try {
                Thread.sleep ( 1000 );
                System.out.println ( Thread.currentThread ().getName () + ":sta_num+1=" + (sta_num+1));
                System.out.println ( Thread.currentThread ().getName () + ":num+1=" + (num+1));
            } catch (InterruptedException e) {
                e.printStackTrace ( );
            }
            System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
        }
    
        //用于对象上
        public void speak_this() {
            synchronized (this) {
                System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
                try {
                    Thread.sleep ( 3000 );
                } catch (InterruptedException e) {
                    e.printStackTrace ( );
                }
                System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
            }
        }
    
        //用于类上
        public void speak_class() {
            synchronized (Peopele.class) {
                System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
                try {
                    Thread.sleep ( 3000 );
                } catch (InterruptedException e) {
                    e.printStackTrace ( );
                }
                System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
            }
        }
    
        //用于任意对象
        public  void speak_obj() {
            synchronized (new Object ()) {
                System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
                try {
                    Thread.sleep ( 3000 );
                } catch (InterruptedException e) {
                    e.printStackTrace ( );
                }
                System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
            }
        }
    
        //用于方法上
        public synchronized void speak_void() {
            System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
            try {
                Thread.sleep ( 3000 );
            } catch (InterruptedException e) {
                e.printStackTrace ( );
            }
            System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
        }
        
        //用于静态方法上
        public synchronized static void speak_static_void() {
            System.out.println ( Thread.currentThread ().getName () + ":开始。。。。。。。。。。" );
            try {
                Thread.sleep ( 3000 );
            } catch (InterruptedException e) {
                e.printStackTrace ( );
            }
            System.out.println ( Thread.currentThread ().getName () + ":结束。。。。。。。。。。" );
        }
    }
  • 相关阅读:
    poj2115
    poj2136
    软件的架构与设计模式之模式的种类
    SOA: My Understanding (转载未来技术方向)
    深度管理Remote Objects的生存期 (转载)
    SmartClient(智能客户端) 转载
    Windows Communication Foundation入门(Part One)
    使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
    软件设计模式C#
    MarshalByRefObjects远程对象及其调用方法
  • 原文地址:https://www.cnblogs.com/chunxiaozhang/p/12666641.html
Copyright © 2011-2022 走看看