Java并发之synchronized

news/2024/7/1 2:37:23

synchronized关键字最主要有以下3种应用方式

修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁;实例锁,一个实例一把锁

修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁;对象锁,一个对象一把锁

修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁;对象锁,一个对象一把锁

实例锁
public class SuperHakceTest implements Runnable{public static Integer flag = 0;public synchronized void instanse(){flag ++;}@Overridepublic void run() {for(int i = 0;i < 1000;i ++){instanse();}}public static void main(String[] args) throws Exception{SuperHakceTest superHakceTest = new SuperHakceTest();Thread thread1 = new Thread(superHakceTest);Thread thread2 = new Thread(superHakceTest);Thread thread3 = new Thread(superHakceTest);thread1.start();thread2.start();thread3.start();thread1.join();thread2.join();thread3.join();System.out.println("LAST FLAG = " + SuperHakceTest.flag);}}对象锁
public class SuperHakceTest implements Runnable{public static Integer flag = 0;public static synchronized void instanse(){flag ++;}@Overridepublic void run() {for(int i = 0;i < 1000;i ++){instanse();}}public static void main(String[] args) throws Exception{SuperHakceTest superHakceTest1 = new SuperHakceTest();SuperHakceTest superHakceTest2 = new SuperHakceTest();SuperHakceTest superHakceTest3 = new SuperHakceTest();Thread thread1 = new Thread(superHakceTest1);Thread thread2 = new Thread(superHakceTest2);Thread thread3 = new Thread(superHakceTest3);thread1.start();thread2.start();thread3.start();thread1.join();thread2.join();thread3.join();System.out.println("LAST FLAG = " + SuperHakceTest.flag);}}//this,当前实例对象锁
synchronized(this){for(int j=0;j<1000000;j++){i++;}
}//class对象锁
synchronized(AccountingSync.class){for(int j=0;j<1000000;j++){i++;}
}

转载于:https://blog.51cto.com/superhakce/2095308


http://lihuaxi.xjx100.cn/news/247509.html

相关文章

torch.unsqueeze()与torch.squeeze()用法

函数描述&#xff1a; unsqueeze(input, dim) → Tensor作用&#xff1a;在指定位置插入一个维度&#xff0c;对数据维度进行扩充 input&#xff1a;输入的Tensor dim&#xff1a;要插入的维度 a torch.arange(6).reshape(2, 3) print(a) b a.unsqueeze(1)#在第2维度加一维…

[转]解决Eclipse中编辑xml文件的智能提示问题

转自&#xff1a;http://hi.baidu.com/cghroom/item/48fd2d0dc1fc23c675cd3c3e 摘要&#xff1a; Eclipse for Android xml 文件代码自动提示功能&#xff0c;介绍Eclipse 编辑器中实现xml 文件代码自动智能提示功能&#xff0c;解决eclipse 代码提示失效、eclipse 不能自动提…

After Effects CS4 期末考试卷

AECS4考试A卷转载于:https://blog.51cto.com/hnxdd/1593985

C++列表初始化容器

initializer_list是一个模板类&#xff0c;可能你已经用过它了但不知道而已&#xff0c;比如下面的代码就用了 #include <iostream> #include <vector>int main() {std::vector<int> vc({ 1,2,3,4 }); //这里调用了构造函数&#xff0c;实参为{1,2,3,4}ret…

系统利益相关者描述案例

利益相关者 主要目标 态度 主要关注点 约束条件 厅长 监督河北省创新事业的发展 强烈支持积极推动河北省科技创新平台的建立&#xff0c;促进河北省科技创新事业的发展 如何优化管理&#xff0c;如何保证推动创新发展事业工作的高效性 无 平台主任&#xff08;院长…

Pytorch中用None增加Tensor维度

作用&#xff1a;在None的位置上增加一个维度. 一行Tensor import torch x torch.randint(4,(1, 4)) print(x) a x[None, :, :] print(fa.shape: {a.shape}) b x[:, None, :2] print(b) print(fb.shape: {b.shape}) c x[:, None, 2:] print(c) print(fc.shape: {c.shape}…

路由策略与策略路由的区别。

这两中方案都是为了控制网络流量的可达性或调整网络流量的路径&#xff1a; 一、路由策略。&#xff08;Route-Policy&#xff09;路由策略是通过修改路由表的路由条目来控制数据流量的可达性。即对接受和发布的路由进过滤。这种方式称为路由策略。 二、策略路由。&#xff08;…

ROS2概述和实践入门

ROS可以说是⽬前机器⼈相关开源社区最流⾏的项⽬之⼀&#xff0c;它是⼀个易⽤且完备的机器⼈开发框架、⽣态乃⾄社区&#xff0c;海量的机器⼈开源项⽬&#xff08;涵盖感知、规划、控制、定位、SLAM和建图、可视化等⼏乎所有机器⼈领域&#xff09;均使⽤ROS作为基础。 以⾃…