首页 > 其他分享 >关于synchronized的使用

关于synchronized的使用

时间:2022-10-10 09:45:09浏览次数:38  
标签:synchronized void System 关于 使用 print public out

Synchronized使用的三种方式:

  1. synchronized代码块-----可以指定任意对象,和synchronized方法联用要指向当前对象this
  2. synchronized方法-----this当前对象
  3. synchronized静态方法-----该类的字节码对象

 

测试类:

public class SynSample {
    public static void main(String[] args) {
        Couplet couplet = new Couplet();
        for (int i = 0; i < 10000; i++) {
            new Thread() {
                public void run() {
                    int r = new Random().nextInt(2);
                    if (r % 2 == 0) {
                        couplet.first();
                    } else {
                        couplet.second();
                    }
                }
            }.start();

        }
    }
}

 

1.synchronized代码块

需要指向同一对象

class Couplet {
    Object lock = new Object();

    public void first() {
        synchronized (lock) {
            System.out.print("琴");
            System.out.print("瑟");
            System.out.print("琵");
            System.out.print("琶");
            System.out.println();
        }
    }

    public void second() {
        synchronized (lock) {
            System.out.print("魑");
            System.out.print("魅");
            System.out.print("魍");
            System.out.print("魉");
            System.out.println();
        }
    }
}

2.synchronized方法

class Couplet {
    Object lock = new Object();

    public synchronized void first() {
            System.out.print("琴");
            System.out.print("瑟");
            System.out.print("琵");
            System.out.print("琶");
            System.out.println();
    }

    public synchronized void second() {
            System.out.print("魑");
            System.out.print("魅");
            System.out.print("魍");
            System.out.print("魉");
            System.out.println();
    }

}

 

两种混用

class Couplet {
    Object lock = new Object();

    public synchronized void first() {
            System.out.print("琴");
            System.out.print("瑟");
            System.out.print("琵");
            System.out.print("琶");
            System.out.println();
    }

    public void second() {
        synchronized (this) {
            System.out.print("魑");
            System.out.print("魅");
            System.out.print("魍");
            System.out.print("魉");
            System.out.println();
        }
    }

}

3.synchronized静态方法

测试类改静态调用:

public class SynSample {
    public static void main(String[] args) {
        Couplet couplet = new Couplet();
        for (int i = 0; i < 10000; i++) {
            new Thread() {
                public void run() {
                    int r = new Random().nextInt(2);
                    if (r % 2 == 0) {
                        Couplet.first();
                    } else {
                        Couplet.second();
                    }
                }
            }.start();

        }
    }
}

 

class Couplet {
    Object lock = new Object();

    public synchronized static void first() {
            System.out.print("琴");
            System.out.print("瑟");
            System.out.print("琵");
            System.out.print("琶");
            System.out.println();
    }

    public synchronized static void second() {
            System.out.print("魑");
            System.out.print("魅");
            System.out.print("魍");
            System.out.print("魉");
            System.out.println();
    }

}

混用

class Couplet {
    Object lock = new Object();

    public synchronized static void first() {
            System.out.print("琴");
            System.out.print("瑟");
            System.out.print("琵");
            System.out.print("琶");
            System.out.println();
    }

    public static void second() {
        synchronized (Couplet.class) {
            System.out.print("魑");
            System.out.print("魅");
            System.out.print("魍");
            System.out.print("魉");
            System.out.println();
        }
    }
}

 

标签:synchronized,void,System,关于,使用,print,public,out
From: https://www.cnblogs.com/blanset/p/16774550.html

相关文章

  • python 字典的嵌套使用案例
    staff_infor_dict={#员工信息"王力宏":{"部门":"科技部","工资":3000,"级别":1},"周杰伦":{"部门":"市......
  • ElementUI采用递归方式使用导航菜单(NavMenu)报错
    在使用element-ui的导航菜单时,由于可能存在无数个子菜单需采用递归方式生成,在组件中重复调用本组件但会导致鼠标移入时循环调用element内部的某个鼠标事件,引起下拉菜单报......
  • dotnet C# 使用 Vortice 支持 Direct2D1 离屏渲染
    本文告诉大家如何使用Vortice进行D2D的离屏渲染功能,本文将在一个纯控制台无窗口的应用下,使用Direct2D1进行离屏绘制,将绘制结果保存为本地图片文件本文属于使用Vort......
  • Jmeter——BeanShell 内置变量vars、props、prev的使用
    在使用Jmeter过程中,或多或少都会接触些BeanShell,它会使工具的使用,变得更灵活。Jmeter中关于BeanShell的有:1.BeanShellSampler取样器:完成Beanshell请求组件中定......
  • Vue3使用axios
    如何在Vue项目中使用axios请求http://www.45fan.com/article.php?aid=1D82KNnQB62JUc6OVue3-使用axios发起网络请求https://blog.csdn.net/liuyuxin36/article/details/......
  • IDEA2021.1.2版本使用Git---撤销改动的代码内容
    一、查看改动的代码有哪些?1.新增加的内容        2.查看所有改动的代码         3.效果如下      二、......
  • Centos7使用sendEmail-v1.56发送邮件
    Centos7使用sendEmail-v1.56发送邮件注意:Centos7默认使用perl5.16,而sendEmail-v.1.56要求使用perl5.10。否则会报以下错误。所以需要下载并安装Perl-5.10Usingthedefa......
  • iptables基本使用举例
    一、链的基本操作1、清除所有的规则。1)清除预设表filter中所有规则链中的规则。#iptables-F2)清除预设表filter中使用者自定链中的规则。#iptables-X#iptables-Z......
  • Session——基本使用
    Session   Session原理 Session使用细节    ......
  • Flask学习笔记(十一)-Flask-script使用详解
    一、定义flask-script是一个支持自定义命令的工具,为Flask程序添加了一个命令行解析器,可以让程序从命令行直接执行相应的程序。flask-script支持在Flask中编写外部脚本,这......