博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
synchronized 修饰在 static方法和非static方法的区别
阅读量:6463 次
发布时间:2019-06-23

本文共 1382 字,大约阅读时间需要 4 分钟。

  Java中synchronized用在静态方法和非静态方法上面的区别

  在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非static方法前面加synchronized到底有什么不同呢?大家都知道,static的方法属于类方法,它属于这个Class(注意:这里的Class不是指Class的某个具体对象),那么static获取到的锁,是属于类的锁。而非static方法获取到的锁,是属于当前对象的锁。所以,他们之间不会产生互斥。

  看代码:

public class Demo {	public static synchronized void staticFunction()			throws InterruptedException {		for (int i = 0; i < 3; i++) {			Thread.sleep(1000);			System.out.println("Static function running...");		}	}	public synchronized void function() throws InterruptedException {		for (int i = 0; i <3; i++) {			Thread.sleep(1000);			System.out.println("function running...");		}	}	public static void main(String[] args) {		final Demo demo = new Demo();		Thread thread1 = new Thread(new Runnable() {			@Override			public void run() {				try {					staticFunction();				} catch (InterruptedException e) {					e.printStackTrace();				}			}		});		Thread thread2 = new Thread(new Runnable() {			@Override			public void run() {				try {					demo.function();				} catch (InterruptedException e) {					e.printStackTrace();				}			}		});		thread1.start();		thread2.start();	}}

  运行结果是:

function running...Static function running...function running...Static function running...function running...Static function running...

  那当我们想让所有这个类下面的方法都同步的时候,也就是让所有这个类下面的静态方法和非静态方法共用同一把锁的时候,我们如何办呢?此时我们可以使用Lock。

转载地址:http://dahzo.baihongyu.com/

你可能感兴趣的文章
poll
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
asp操作access提示“无法从指定的数据表中删除”
查看>>
git bash 风格调整
查看>>
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
ASP.NET性能优化之分布式Session
查看>>
转载:《TypeScript 中文入门教程》 16、Symbols
查看>>
C#技术------垃圾回收机制(GC)
查看>>