博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Synchronized关键字
阅读量:4983 次
发布时间:2019-06-12

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

1、修饰普通方法

public synchronized void method1(){      ......}public synchronized void method2(){          ......}public static void main(String[] args) {    final Test test = new Test();    new Thread(new Runnable() {      @Override      public void run() {        test.method1();      }    }).start();    new Thread(new Runnable() {      @Override      public void run() {        test.method2();      }    }).start();  }//不同方法加锁,并且通过同一对象调用,所以调用之前要竞争同一对象上的锁,所以线程2需要等待线程1的method1执行完成才能开始执行method2方法。

 

2、修饰静态方法

public static synchronized void method1(){       ......}public static synchronized void method2(){       ...... } public static void main(String[] args) {    final Test test1 = new Test();    final Test test2 = new Test();    new Thread(new Runnable() {      @Override      public void run() {        test1.method1();      }    }).start();    new Thread(new Runnable() {      @Override      public void run() {        test2.method2();      }    }).start();  }//method1和method2顺序执行,不能并发执行:即使test1和test2属于不同的对象,但是它们都属于同一个类的实例//(对静态方法的同步本质上是对类的同步,静态方法本质上是属于类的方法,而不是对象上的方法)

 

 

3、修饰代码块

public void method1(){          synchronized (this) {           //执行内容      } } public void method2(){          synchronized (this) {            //执行内容          } }//对于代码块的同步,判断后面括号中对象:括号内容都是this;同一对象2个线程调用:顺序执行,不同对象2个线程调用:并发执行//括号内容不同:并发执行

 

转载于:https://www.cnblogs.com/dreamShines/p/10990669.html

你可能感兴趣的文章
四大营销模式的优缺点
查看>>
log4net配置及使用方法
查看>>
20145335郝昊 《信息安全系统设计基础》第12周学习总结
查看>>
(转)记录队列长度的方法
查看>>
洛谷 - P3786 - 萃香抱西瓜 - 状压dp
查看>>
Win10系列:JavaScript综合实例1
查看>>
【二分匹配】 HDU 5093 Battle ships 经典二分题
查看>>
Bundle数据类型
查看>>
字典、数组、JSON之间的转化小demo
查看>>
10.数据结构和算法 初识
查看>>
4.几个「不难但却很有用」的 Git 技能点
查看>>
HDU 1708 简单dp问题 Fibonacci String
查看>>
Hibernate中用注解配置一对多双向关联和多对一单向关联
查看>>
使用Slim在PHP中实现Restful web api
查看>>
常见加密算法
查看>>
Docker操作笔记(三)数据管理
查看>>
通过.frm表结构和.ibd文件恢复数据
查看>>
R语言之——字符串处理函数
查看>>
架构师速成5.1-小学gtd进阶
查看>>
Spring-aop(一)
查看>>