synchronized是Java中最基本的线程同步机制之一,通过在方法或代码块上添加synchronized关键字,可以确保只有一个线程可以访问该方法或代码块。它是Java中实现线程安全的重要机制之一。
synchronized关键字的使用方式有两种:
1、修饰实例方法
当synchronized关键字修饰一个实例方法时,该方法在被调用时将会获取该实例对象的锁。这意味着,在同一时间内只有一个线程可以访问该实例对象的该方法,其他线程需要等待该锁被释放才能访问该方法。
下面是一个简单的示例,演示了如何使用synchronized关键字修饰实例方法:
public class SynchronizedExample {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
在这个示例中,increment()和getCount()方法都使用synchronized关键字修饰,这意味着同一时间内只有一个线程可以访问这些方法。
2、修饰代码块
synchronized关键字也可以用于修饰代码块,当一个线程进入代码块时,会获取该代码块所在对象的锁,其他线程需要等待该锁被释放才能进入该代码块。
下面是一个简单的示例,演示了如何使用synchronized关键字修饰代码块:
public class SynchronizedExample {
private final Object lock = new Object();
private int count = 0;
public void increment() {
synchronized (lock) {
count++;
}
}
public int getCount() {
synchronized (lock) {
return count;
}
}
}
在这个示例中,我们使用一个普通对象lock作为锁对象,并在increment()和getCount()方法内部的代码块上使用synchronized关键字来获取该锁对象的锁。
总的来说,synchronized关键字提供了一种简单而有效的线程同步机制,它可以确保多个线程之间对共享资源的访问是有序、安全的。但需要注意的是,过度地使用synchronized关键字可能会导致性能问题,因为获取和释放锁都需要消耗一定的时间,而且在某些情况下可能会出现死锁等问题。因此,在使用synchronized关键字时需要慎重考虑并仔细设计同步策略。
标签:count,Java,synchronized,关键字,线程,修饰,public From: https://www.cnblogs.com/xianfengzhike/p/17886959.html