首页 > 编程语言 >[Java并发]Synchronized

[Java并发]Synchronized

时间:2024-07-09 19:07:56浏览次数:21  
标签:Java Synchronized synchronized void public 并发 static Test class

public class AtomicTest01 {
    public static int i = 0;
    public static void main(String[] args) {
        Runnable task = new Runnable(){
            @Override
            public void run() {
                synchronized (this){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.print(i++ + " ");
                }
            }
        };
        for (int j = 0; j < 10; j++) {
            Thread thread = new Thread(task);
            thread.start();
        }
    }
}

synchronized锁住的到底是什么

如果synchronized加在普通方法上,锁住的其实是this,也就是当前实例对象

class Test{
    public synchronized void test() {
    }
}
//等价于
class Test{
    public void test() {
        synchronized(this) {
        }
    }
}

如果synchronized加在静态方法上,锁住的其实是该类的class字节码文件

class Test{
    public synchronized static void test() {
    }
}

//等价于
class Test{
    public static void test() {
        synchronized(Test.class) {
        }
    }
}

synchronized关键字加在代码块上,锁住的对象要自己指定,可以是实例对象,可以是class对象,也可以是自定义对象

标签:Java,Synchronized,synchronized,void,public,并发,static,Test,class
From: https://www.cnblogs.com/DCFV/p/18292590

相关文章

  • Java爬虫翻页
    编写一个Java爬虫以进行翻页通常涉及到使用HTTP客户端(如ApacheHttpClient或OkHttp)来发送请求,解析HTML页面(如使用Jsoup库),以及处理分页逻辑(如通过URL参数或页面内的链接进行翻页)。1.使用Jsoup和ApacheHttpClient的Java爬虫示例以下是一个使用Jsoup和ApacheHttpClient的Java爬......
  • Java volatile 深度解析
    简介被volatile修饰的变量有两大特点:当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值立即刷新回主内存中。当读一个volatile变量时,JMM会把线程对应的本地内存设置为无效,需要工作线程重新回到主内存中读取最新共享变量。所以volatile的写的内存语......
  • 【转】-Java反射
    Java反射由浅入深|进阶必备原文链接本博文主要记录我学习Java反射(reflect)的一点心得,在了解反射之前,你应该先了解Java中的Class类,如果你不是很了解,可以先简单了解下。一、Java反射机制参考了许多博文,总结了以下个人观点,若有不妥还望指正:Java反射机制在程序运行时,......
  • 教你了解八大排序(含代码注释示例java)
    目录1.冒泡排序(BubbleSort)2.选择排序(SelectSort)3.插入排序(InsertionSort)4.希尔排序(ShellSort)5.归并排序(MergeSort)6.快速排序(QuickSort)7.堆排序(HeapSort)8.基数排序(RadixSort)1.冒泡排序(BubbleSort)这是最简单的排序算法之一。它......
  • 【狂神说Java】系列学习笔记01——MarkDown语法
    #MarkDown学习本文为B站老师秦疆【狂神说Java】系列,课堂学习笔记,主要联练习的是MarkDown的使用方法,老师的博客链接我没找到,广告1.标题+加粗2级3级4级5级6级最多七级标题Helloworld!Helloworld!Helloworld!Helloworld!引用-沐风6标题一级标题(#+空格)二......
  • Java IO
    JavaI/OBIO详解BIO就是:blockingIO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除......
  • java+selenium+autoIt 实现下载(打印)功能
    java+selenium+autoIt实现下载(打印)功能selenium是一个开源的自动化测试框架,它可以模拟用户对浏览器的操作,进行自动化的测试。但是,它不仅仅只能用来做测试。AutoIt是一个使用类似BASIC脚本语言的免费软件,它设计用于WindowsGUI(图形用户界面)中进行自动化操作。它利用模拟键盘......
  • [Java SE] Java-文件系统-常用文件路径的获取方法
    1获取相对路径/***获取相对路径【推荐】*使用Java提供的Path类和Paths类来获取相对路径。*例如,假设有两个路径a和b,我们可以使用Path类的relativize()方法来获取相对路径,该方法返回一个相对路径的Path对象。*/@TestpublicvoidgetRelativePathTest1(){ Pathpath......
  • JAVA-二维数组-要求计算出每个季度的总营业额和全年的总营业额-求指导
            二维数组的练习某商城每个季度的营业额如下:单位(万元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99要求计算出每个季度的总营业额和全年的总营业额package_exercis;publicclassTwoArray{publicstaticvoidmain(S......
  • [深入理解Java虚拟机]Java内存模型
    Java内存模型概述多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多场景下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数......