Java中如何使用关键字synchronized声明同步函数?
发布时间:2023-11-13 01:42:57
在Java中,我们可以使用关键字 synchronized 来声明同步函数,以实现线程的同步。
synchronized 关键字可以用于修饰一个方法,使得该方法在多线程环境下成为同步方法。当一个线程正在执行同步方法时,其他线程需要等待该线程执行完毕才能进入该方法。
声明同步函数的方法如下:
public synchronized void synchronizedMethod() {
// 同步代码块
}
在上述示例中, synchronized 关键字被用来修饰 synchronizedMethod 方法,使得该方法成为同步方法。
当一个线程进入同步方法时,它将获得该方法所属对象的锁。其他线程如果想要进入该方法,则需要等待该锁被释放。只有在锁被释放后,其他线程才能获得锁,进入该同步方法。
需要注意的是,同步函数默认使用的是当前对象(this)的锁。如果有多个线程同时访问对象的不同同步函数,它们是互斥的,因为它们都使用了同一个对象的锁。如果想要同步不同对象的同步函数,需要使用不同的对象锁。
下面是一个使用同步函数的简单示例:
public class MyThread implements Runnable {
private int count = 0;
public synchronized void incrementCount() {
count++;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
incrementCount();
}
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
MyThread myThread = new MyThread();
Thread thread1 = new Thread(myThread);
Thread thread2 = new Thread(myThread);
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("Count: " + myThread.getCount());
}
}
在上述示例中,MyThread 类实现了 Runnable 接口,并重写了 run 方法,该方法中调用了 incrementCount 方法。incrementCount 方法是一个同步函数,使用 synchronized 关键字修饰。在 main 方法中,创建了两个线程来执行 MyThread 对象的 run 方法,这样两个线程就会同时对 count 进行增加操作。最后,使用线程的 join 方法确保两个线程执行完毕后再输出结果。
总结:在Java中,可以使用关键字 synchronized 来声明同步函数。同步函数的作用是确保同一时间只有一个线程可以执行该方法。同步函数默认使用的是当前对象的锁。通过使用同步函数,我们可以实现线程的同步,避免线程之间的竞争和冲突。
