Java의 인터페이스 및 추상 클래스 동기화 메커니즘: 인터페이스 및 추상 클래스는 인스턴스화할 수 없으며 자체 잠금을 가질 수 없습니다. 일반 메소드와 유사하지만 동기화 키워드를 사용하여 수정되는 동기화된 메소드를 선언할 수 있습니다. 동기화된 메서드가 호출되면 스레드는 해당 메서드의 잠금을 획득합니다. 동일한 메서드를 동시에 호출하는 다른 스레드는 잠금이 해제될 때까지 차단됩니다. 실제 사례: 공유 리소스 클래스 SharedResource에는 두 개의 동기화 메서드가 있습니다. 그러나 메서드 동기화로 인해 스레드는 값의 정확성을 보장하고 동시성을 방지하기 위해 값을 수정하기 전에 잠금에 액세스할 때까지 기다려야 합니다. 문제.
Java의 인터페이스와 추상 클래스의 동기화 및 잠금 메커니즘
소개
동기화는 여러 스레드가 공유 리소스에 안전하게 액세스할 수 있도록 보장하는 메커니즘입니다. Java에서는 잠금을 사용하여 동기화를 달성할 수 있습니다. 잠금은 스레드가 잠금을 요청할 때 잠금이 해제될 때까지 다른 스레드가 리소스에 액세스하지 못하도록 차단하는 개체입니다.
인터페이스와 추상 클래스의 동기화
인터페이스와 추상 클래스는 인스턴스화할 수 없으므로 자체 잠금을 가질 수 없습니다. 그러나 일반 메소드와 매우 유사하지만 synchronized
키워드를 사용하여 수정되는 동기화된 메소드를 선언할 수 있습니다. synchronized
关键字修改。
public interface SynchronizedInterface { synchronized void synchronizedMethod(); } public abstract class SynchronizedAbstractClass { synchronized void synchronizedMethod(); }
当某个线程调用同步方法时,它将获取该方法的锁。如果另一个线程尝试同时调用同一个方法,它将被阻塞,直到该锁被释放。
实战案例
考虑一个共享资源类 SharedResource
,它具有两个同步方法:increment
和 decrement
。
public class SharedResource { private int value = 0; public synchronized void increment() { value++; } public synchronized void decrement() { value--; } }
现在,我们有两个线程 Thread1
和 Thread2
,它们并发地访问 SharedResource
。
public class Thread1 implements Runnable { private SharedResource sharedResource; @Override public void run() { for (int i = 0; i < 100000; i++) { sharedResource.increment(); } } } public class Thread2 implements Runnable { private SharedResource sharedResource; @Override public void run() { for (int i = 0; i < 100000; i++) { sharedResource.decrement(); } } } public class Main { public static void main(String[] args) { SharedResource sharedResource = new SharedResource(); Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Final value: " + sharedResource.value); } }
在这个案例中,两个线程并行地调用 increment
和 decrement
方法,但由于这些方法是同步的,因此每个线程在修改 value
之前都必须等待对锁的访问。这确保了 value
rrreee
increment
및 decrement
가 있는 공유 리소스 클래스 SharedResource
를 생각해 보세요. 🎜rrreee🎜이제 SharedResource
에 동시에 액세스하는 두 개의 스레드 Thread1
및 Thread2
가 있습니다. 🎜rrreee🎜이 경우 두 스레드가 increment
및 decrement
메서드를 병렬로 호출하지만 이러한 메서드가 동기화되므로 각 스레드가 값을 수정하고 있습니다 code>는 먼저 잠금에 대한 액세스를 기다려야 합니다. 이렇게 하면 <code>value
값이 항상 정확하고 동시성 문제가 발생하지 않습니다. 🎜위 내용은 Java의 인터페이스와 추상 클래스의 동기화 및 잠금 메커니즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!