synchronized用法举例说明

欢喜 Java每日一问 发布时间:2025-06-05 09:24:40 阅读数:848 1
下文笔者讲述"synchronized用法"的示例说明,如下所示

synchronized用法简介

  
  `synchronized`是Java中用于实现线程同步的关键字,
    可确保多线程环境下对共享资源的安全访问

synchronized用法示例分享

1.修饰实例方法
  锁住是当前对象实例(即 `this`)
  多个线程调用同一个对象的该方法时会互斥执行。
 
	public class Counter {
		private int count = 0;

		public synchronized void increment() {
			count++;
		}

		public int getCount() {
			return count;
		}
	}
   多个线程调用`increment()`方法时
     只有一个线程能进入该方法
	  保证[count]线程安全

2.修饰静态方法
  锁住是类`Class`对象
    所有该类的实例共享同一把锁
	public class Singleton {
		private static int instanceCount = 0;

		public static synchronized void createInstance() {
			instanceCount++;
		}

		public static int getInstanceCount() {
			return instanceCount;
		}
	}
   
     所有线程调用createInstance()方法都会互斥运行
	   即使创建多个`Singleton`实例

3.修饰代码块(推荐)
    更灵活、粒度更细的同步控制
	 可指定锁对象
 
	public class Task {
		private final Object lock = new Object();
		private int value = 0;

		public void doSomething() {
			synchronized (lock) {
				value++;
			}
		}
	}
    使用私有锁对象`lock`
	  控制同步代码块
	  避免锁定整个方法
	  提高并发性能
 
4.与`this`配合使用的代码块
    锁住当前对象实例
	 等价于在方法上加`synchronized`
 
	public class DataProcessor {
		private int data = 0;

		public void processData() {
			synchronized (this) {
				data += 10;
			}
		}
	}
   所有调用`processData()`线程
     会互斥访问该同步代码块

5.与`Class`对象配合使用代码块
   实现类级别的同步
    适用于保护类级别资源
 
	public class Logger {
		public void log(String message) {
			synchronized (Logger.class) {
				System.out.println(message);
			}
		}
	}
 
  所有`Logger`实例
     调用`log()`方法时都会互斥运行

synchronized用法总结

使用方式锁对象特点
实例方法当前对象(`this`)保护对象内部状态
静态方法类的 Class 对象保护类级别共享资源
同步代码块(对象锁) 指定对象粒度细,推荐使用
同步代码块(类锁) 类的Class对象全局资源同步
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202506/8473.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者