昆明达内Java培训的老师上一期讲了Java synchronized实例方法使用synchronized加锁,这一期给同学们讲Java synchronized静态方法使用synchronized加锁。

二、静态方法中使用synchronized加锁

静态方法中默认被加锁的对象是此静态方法所在类的class对象。

1 class

staticMethodSynchronized {

2    public static synchronized void method1() throws InterruptedException {

3        System.out.println(Thread.currentThread().getName() + ":

start");

4        Thread.sleep(5000);

5        System.out.println(Thread.currentThread().getName() + ": finish");

6    }

7    public static synchronized void method2() throws InterruptedException {

8        System.out.println(Thread.currentThread().getName() + ":

start");

9        Thread.sleep(5000);

10        System.out.println(Thread.currentThread().getName() + ":

finish");

11    }

12 }

13 public class

TestStaticClassSynchronized {

14    public static void main(String[] args) {

15        Thread t1 = new Thread(new Runnable()

{

16

17            @Override

18            public void run() {

19                // TODO Auto-generated method stub

20                try {

21                    staticMethodSynchronized.method1();

22                } catch (InterruptedException

e) {

23                    // TODO Auto-generated

catch block

24                    e.printStackTrace();

25                }

26            }

27

28        }, "t1");

29        Thread t2 = new Thread(new Runnable()

{

30

31            @Override

32            public void run() {

33                // TODO Auto-generated method

stub

34                try {

35                    staticMethodSynchronized.method2();

36                } catch (InterruptedException

e) {

37                    // TODO Auto-generated

catch block

38                    e.printStackTrace();

39                }

40            }

41

42        }, "t2");

43        t1.start();

44        t2.start();

45    }

46 }

在上述代码中创建了两个线程并命名为t1,t2。t1,t2线程调用了staticMethodSynchronized类的两个静态同步方法method1和method2。

在t1线程开始执行后,即使t1线程睡眠了5s,线程t2中的method2方法仍然没有得到执行。这是因为t1线程先执行的method1方法,持有了staticMethodSynchronized类对象的锁,且method1方法并没有执行完,staticMethodSynchronized类对象的锁没有被释放,所以comeInIn方法无法对staticMethodSynchronized类对象加锁,就无法继续执行,只能等到t1线程中的method1方法执行完毕,释放staticMethodSynchronized类对象的锁,method2方法才能继续执行。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

java 静态方法枷锁_Java synchronized静态方法使用synchronized加锁相关推荐

  1. java并发编程_Java并发编程之 synchronized

    大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下Java中内存泄漏如何分析解决的相关知识,今天跟大家分享Java之 sync ...

  2. java 买票_java 多线程之synchronized wait/notify解决买票问题

    一.Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的st ...

  3. java 静态方法同步_Java – 同步静态方法

    这是我的测试代码,表明你是对的,这篇文章有点过分谨慎: class Y { static synchronized void staticSleep() { System.out.println(&q ...

  4. java同步方法必须是静态的吗_Java基础知识之synchronized同步方法、代码块、静态方法、静态代码块的区别...

    Java中的同步块用synchronized标记,是同步在某个对象上,所有同步在一个对象上的同步块在同一时刻只能被一个线程进入并执行操作,其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退 ...

  5. zbb20180913 java synchronized同步静态方法和同步非静态方法的异同

    java synchronized同步静态方法和同步非静态方法的异同 所有的非静态同步方法用的都是同一把锁--实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步 ...

  6. java同步关键字_Java中synchronized关键字修饰方法同步的用法详解

    Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...

  7. java动态同步_java并发基础-Synchronized

    基础使用 基本上Java程序员都简单的了解synchronized的使用: 无非就是用在多线程环境下的同步. 看如下简单的例子: publicclassUnsafeCounter{ privatein ...

  8. java 同步块_java 同步块(Java Synchronized Blocks)

    java 同步块(Java Synchronized Blocks) Java 同步块包括方法同步和代码块同步.java 同步可以避免资源竞争,避免死锁. 主题包括的主要内容: The Java sy ...

  9. java 静态方法重写_Java 类中可以覆盖静态方法吗?

    Java技术栈 www.javastack.cn 打开网站看更多优质文章 Java 类中可以覆盖静态方法吗? 不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为 ...

最新文章

  1. java写exe程序实例,java实现可安装的exe程序实例详解
  2. 牛年快乐~新一年从甜蜜的烘焙里学AI
  3. requestmapping默认是get还是post_编写Spring MVC控制器的14个技巧,你今天get到了吗?...
  4. 【C语言入门教程】2.2 常量 与 变量
  5. 为什么选择ASP.NET Core
  6. ImageJ Nikon_科研论文作图之ImageJ
  7. JavaScript中的数学对象Math
  8. 查看mysql服务的可视化_Prometheus 监控Mysql服务器及Grafana可视化
  9. 第六周作业1——利用哈夫曼编码英文字母表
  10. c语言blackjack设计思路,写一个“BlackJack ”Java应用程序 该计划将测试你的逻辑思维。...
  11. 选课系统(面向对象的编程方法)
  12. Java中的函数式编程(二)函数式接口Functional Interface
  13. AI一分钟 | 无人驾驶技术排名:百度居中游,苹果特斯拉垫底;Google在深圳设立办公室
  14. influx配置文件详解
  15. 热力学多元函数微分基础
  16. 灵魂拷问:缓存与数据库的双写一致性如何保证?
  17. 名画19 董源《画选三幅》
  18. asp.net快速开发框架(eFrameWork) v4.0.5
  19. 不成熟的c语言练习2
  20. 数控g71编程实例带图_数控程序中g71编程实例

热门文章

  1. python爬虫之静态网页(以当当网图书畅销榜榜为例)
  2. 职称申报神器-职称小百科告诉你专业对应的评委会
  3. 千年3+db服务器修改无效,《千年3》2019年1月服务器互通公告
  4. python练习题,使用爬虫爬取百度百科内置BeautifulSoup安装方法
  5. 默孚龙导电滑环的内部结构和使用范围
  6. Java面试_代理模式
  7. 南京大学本科、斯坦福博士、化学奥赛金牌得主 王庆根 人生反思
  8. 20162316刘诚昊 第八周学习作业
  9. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API
  10. OSError: [WinError 87]参数错误