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 () + ":结束。。。。。。。。。。" );
        }
    }
  • 相关阅读:
    关于【无法将*.dll复制到指定目录】错误的解决
    给一个容器控件内(如:div,form)文本框批量添加验证事件
    js操作dom(2)
    关于.net中修饰符的一点总结
    js操作dom(3)
    关于【源文件与模块生成时的文件不同】问题的解决
    pb中用OLE Control 报错解决方法 (转载)
    Web前端技术(摘抄)
    Uva1420 Priest John's Busiest Day
    UVa1445 Cubist Artwork
  • 原文地址:https://www.cnblogs.com/chunxiaozhang/p/12666641.html
Copyright © 2011-2022 走看看