zoukankan      html  css  js  c++  java
  • synchronized 锁的是方法还是对象还是类?测试实例

    package com.swt.lock;
    
    public class Test02 {
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    SyncMethod syncMethod = new SyncMethod();
                    syncMethod.sysn1();
                }
            });
            thread.start();
            thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    SyncMethod syncMethod = new SyncMethod();
                    syncMethod.sysn2();
                }
            });
            thread.start();
            thread.join();
        }
    }
    
    class SyncMethod {
        public synchronized void sysn1() {
            for (int i = 0; i < 100; i++) {
                System.out.println("sysn1 " + i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public synchronized void sysn2() {
            for (int i = 0; i < 100; i++) {
                System.out.println("sysn2 " + i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

      输出结果可以看到,两个线程是交替执行。

    sysn1 0
    sysn2 0
    sysn2 1
    sysn1 1
    sysn2 2
    sysn1 2
    sysn2 3
    sysn1 3
    sysn2 4
    

      

    package com.swt.lock;
    
    public class Test02 {
        public static void main(String[] args) throws InterruptedException {
            SyncMethod syncMethod = new SyncMethod();
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    syncMethod.sysn1();
                }
            });
            thread.start();
            thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    syncMethod.sysn2();
                }
            });
            thread.start();
            thread.join();
        }
    }
    
    class SyncMethod {
        public synchronized void sysn1() {
            for (int i = 0; i < 100; i++) {
                System.out.println("sysn1 " + i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public synchronized void sysn2() {
            for (int i = 0; i < 100; i++) {
                System.out.println("sysn2 " + i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

      输出结果可以看到,两个线程是顺序执行

    sysn1 0
    sysn1 1
    sysn1 2
    ...
    sysn1 98
    sysn1 99
    sysn2 0
    sysn2 1
    sysn2 2
    sysn2 3
    

      

  • 相关阅读:
    vc++6.0如何调试
    Visual C++单文档混合分割视图
    使用VC6.0实现窗口的任意分割张中庆
    用MFC创建通用窗体分割框架
    vc++6.0编译环境介绍(1、2)
    浅谈SDI单文档多视切换方法
    单文档多视图Formview切换源代码(此网还有许多其它多视图切换的源代码)
    VC单文档实现多视图的方法
    Visual C++(VC++6.0)编译器常用选项设置
    PowerTip of the DayRemoving Empty Things
  • 原文地址:https://www.cnblogs.com/song-wentao/p/7890191.html
Copyright © 2011-2022 走看看