zoukankan      html  css  js  c++  java
  • 同步方法-java

    除了同步代码块能实现同步执行外,同步方法也可以。

    先看下同步代码块实现同步执行:

    public class Demo4 {
        public static void main(String[] args) {
            Demo d = new Demo();
    
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print1();
                    }
                }
            }.start();
    
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print2();
                    }
                }
            }.start();
        }
    }
    
    class Demo{
        Object o = new Object();
        public void print1(){
            synchronized (o){                            // synchronized ()传入一个对象即可,相当于一把锁
                    System.out.print("我");
                    System.out.print("好");
                    System.out.print("饿");
                    System.out.print("啊");
                    System.out.print("
    ");
            }
        }
    
        public void print2(){
            synchronized (o){                             // synchronized () 传入的对象要和上面的一样
                    System.out.print("想");
                    System.out.print("吃");
                    System.out.print("汉");
                    System.out.print("堡");
                    System.out.print("包");
                    System.out.print("
    ");
            }
        }
    }

    同步方法实现同步执行:

    public class Demo5 {
        public static void main(String[] args) {
            Demo6 d = new Demo6();
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print1();
                    }
                }
            }.start();
    
            new Thread() {
                @Override
                public void run(){
                    while (true){
                        d.print2();
                    }
                }
            }.start();
        }
    
    }
    
    class Demo6{
        public synchronized void print1(){
            System.out.print("我");
            System.out.print("好");
            System.out.print("饿");
            System.out.print("啊");
            System.out.print("
    ");
        }
    
        public synchronized void print2(){
            System.out.print("想");
            System.out.print("吃");
            System.out.print("汉");
            System.out.print("堡");
            System.out.print("包");
            System.out.print("
    ");
        }
    }

    同步方法的锁对象是什么呢?

    在同步代码块实现同步执行的代码中,我们可以很清楚地看到锁对象是Object o(当然其他的也可以)。那么同步方法的锁对象是什么呢?

    经过实验,发现:

    非静态的同步方法的锁对象是this

    静态的同步方法的锁对象是该类的字节码对象

  • 相关阅读:
    css3圆角细节
    css3伪元素
    使用vscode在谷歌上运行代码
    SpringCloud-技术专区-Gateway优雅的处理Filter抛出的异常
    SpringCloud-技术专区-Gateway全局通用异常处理
    Mybatis-技术专区-插件开发指南
    消息中间件-技术专区-RabbitMQ基本介绍
    SpringBoot-技术专区-自定义TaskExecutor线程池
    MySQL-技术专区-Binlog和Redolog的介绍
    SpringBoot-技术专区-Redis同数据源动态切换db
  • 原文地址:https://www.cnblogs.com/chichung/p/10287810.html
Copyright © 2011-2022 走看看