java关键字synchronized
2022/2/24 20:21:40
本文主要是介绍java关键字synchronized,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- synchronized介绍:该关键字用于为Java对象、方法、代码块提供线程安全的操作。其属于独占式的悲观锁,同时属于可重入锁。
- synchronized的作用范围
- 作用于成员变量和非静态方法时:锁住的是对象实例,即this对象;
- 作用于静态方法时:锁住的是Class实例;
- 作用于一个代码块时:锁住的是所有代码块中配置的对象。
- 代码实例
/*1.作用于成员变量和非静态方法时:锁住的是对象实例,即this对象;*/ public class SynchronizedDemo { public static void main(String[] args) { // final SynchronizedDemo synchronizedDemo=new SynchronizedDemo(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo.generalMethod1(); } }).start(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo.generalMethod2(); } }).start(); } public synchronized void generalMethod1(){//synchronized作用于普通的方法,锁住的是当前实例对象 for (int i=1;i<3;i++){ System.out.println("generalM1 execute "+i+" time"); } } public synchronized void generalMethod2(){//synchronized作用于普通的方法,锁住的是当前实例对象 for (int i=1;i<3;i++){ System.out.println("generalM2 execute "+i+" time"); } } } //输出结果 /* generalM1 execute 1 time generalM1 execute 2 time generalM2 execute 1 time generalM2 execute 2 time */ /*2.作用于静态方法时:锁住的是Class对象;*/ package hcx.main.offer.Javasynchronized; public class SynchronizedDemo { public static void main(String[] args) { // final SynchronizedDemo synchronizedDemo=new SynchronizedDemo(); final SynchronizedDemo synchronizedDemo2=new SynchronizedDemo(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo.generalMethod1(); } }).start(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo2.generalMethod2(); } }).start(); } public static synchronized void generalMethod1(){//synchronized作用于普通的方法,锁住的是当前实例对象 for (int i=1;i<3;i++){ System.out.println("generalM1 execute "+i+" time"); } } public static synchronized void generalMethod2(){//synchronized作用于普通的方法,锁住的是当前实例对象 for (int i=1;i<3;i++){ System.out.println("generalM2 execute "+i+" time"); } } } /* generalM1 execute 1 time generalM1 execute 2 time generalM2 execute 1 time generalM2 execute 2 time */ /*3.作用于代码块时:锁住的是所有代码块中配置的对象;*/ public class SynchronizedDemo3 { String lockA="lockA"; public static void main(String[] args) { // final SynchronizedDemo3 synchronizedDemo=new SynchronizedDemo3(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo.blockMethod1(); } }).start(); new Thread(new Runnable() { @Override public void run() { synchronizedDemo.blockMethod2(); } }).start(); } public void blockMethod1(){//synchronized作用于代码块,锁住的是所有代码块中配置的对象 synchronized (lockA) { for (int i = 1; i < 3; i++) { System.out.println("blockMethod1 execute " + i + " time"); } } } public void blockMethod2(){//synchronized作用于普通的方法,锁住的是所有代码块中配置的对象 synchronized (lockA) { for (int i = 1; i < 3; i++) { System.out.println("blockMethod2 execute " + i + " time"); } } } } //输出结果 /* blockMethod1 execute 1 time blockMethod1 execute 2 time blockMethod2 execute 1 time blockMethod2 execute 2 time */
这篇关于java关键字synchronized的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?