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 () + ":结束。。。。。。。。。。" );
        }
    }
  • 相关阅读:
    PDO 数据访问抽象层
    注册审核、批量删除
    分页查询
    会话用法
    封装成类
    多条件查询(复选框条件)
    IP子网划分
    redhat 用yum安装的apache、mysql一般默认安装在哪个目录下?
    nslookup
    linux 设置时间
  • 原文地址:https://www.cnblogs.com/chunxiaozhang/p/12666641.html
Copyright © 2011-2022 走看看