理论
关键字Synchronized是Java中解决并发问题的一种最常用、最简单的方法 ,它可以确保线程互斥的访问同步代码。
关键字synchronized可以保证方法或者代码块在运行时,同一时刻只有一个线程可以进入到临界区,同时它还可以保证共享变量的内存可见性。
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础。
Synchronzed有以下三种应用方式:
- 普通同步方法(实例方法):锁是当前实例对象 ,进入同步代码前要获得当前实例的锁
synchronized 返回值 方法名(){ //锁的是当前的对象 }
- 静态同步方法:锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁
- 同步代码块:锁是括号里面的对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁。
synchronized(o){ }
当多个线程同时对一个对象的同一个方法进行操作时,只有一个线程能够抢到锁。因为一个对象只有一把锁,一个线程获取了该对象的锁之后,其他线程无法获取该对象的锁,就不能访问该对象的synchronized实例方法,但是可以访问非synchronized修饰的方法。
public class MyRunnable implements Runnable{
private static int i = 0;//共享资源
public synchronized void incr(){ // synchronized 修饰实例方法
i++;
}
@Override
public void run(){
for (int j =0 ; j
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?