public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class SharedResource {
private int data = 0;
private final ReadWriteLock lock = new ReentrantReadWriteLock();
public int readData() {
lock.readLock().lock(); // 获取读锁
try {
return data;
} finally {
lock.readLock().unlock(); // 释放读锁
}
}
public void writeData(int newValue) {
lock.writeLock().lock(); // 获取写锁
try {
data = newValue;
} finally {
lock.writeLock().unlock(); // 释放写锁
}
}
}
import java.util.concurrent.atomic.AtomicBoolean;
public class SpinLock {
private AtomicBoolean locked = new AtomicBoolean(false);
public void lock() {
while (!locked.compareAndSet(false, true)) {
// 自旋等待锁的释放
}
}
public void unlock() {
locked.set(false);
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SharedDataAccess {
private int sharedData = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
sharedData++;
} finally {
lock.unlock();
}
}
public int getSharedData() {
lock.lock();
try {
return sharedData;
} finally {
lock.unlock();
}
}
}
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class CacheManager<K, V> {
private Map<K, V> cache = new HashMap<>();
private Lock lock = new ReentrantLock();
public void put(K key, V value) {
lock.lock();
try {
cache.put(key, value);
} finally {
lock.unlock();
}
}
public V get(K key) {
lock.lock();
try {
return cache.get(key);
} finally {
lock.unlock();
}
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class TaskScheduler {
private Lock lock = new ReentrantLock();
public void scheduleTask(Runnable task) {
lock.lock();
try {
// 执行任务调度逻辑
task.run();
} finally {
lock.unlock();
}
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ResourceManager {
private int availableResources;
private Lock lock = new ReentrantLock();
public ResourceManager(int initialResources) {
availableResources = initialResources;
}
public Resource acquireResource() {
lock.lock();
try {
if (availableResources > 0) {
availableResources--;
return new Resource();
}
return null;
} finally {
lock.unlock();
}
}
public void releaseResource() {
lock.lock();
try {
availableResources++;
} finally {
lock.unlock();
}
}
private class Resource {
// 资源类的实现
}
}
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
public class MessageQueue {
private Queue<String> queue = new ConcurrentLinkedQueue<>();
public void sendMessage(String message) {
queue.offer(message);
}
public String receiveMessage() {
return queue.poll();
}
}
public class DeadlockExample {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized (lock1) {
System.out.println("Method 1: Holding lock1...");
// 模拟一些处理
synchronized (lock2) {
System.out.println("Method 1: Holding lock2...");
// 模拟一些处理
}
}
}
public void method2() {
synchronized (lock2) {
System.out.println("Method 2: Holding lock2...");
// 模拟一些处理
synchronized (lock1) {
System.out.println("Method 2: Holding lock1...");
// 模拟一些处理
}
}
}
}
public class LockGranularityExample {
private final Object globalLock = new Object();
private int count = 0;
public void increment() {
synchronized (globalLock) {
count++;
}
}
public int getCount() {
synchronized (globalLock) {
return count;
}
}
}
public class TooManyLocksExample {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized (lock1) {
// 操作1
}
}
public void method2() {
synchronized (lock2) {
// 操作2
}
}
public void method3() {
synchronized (lock1) {
// 操作3
}
}
}
public class ResourceCleanupExample {
private final Object lock = new Object();
private List<Resource> resources = new ArrayList<>();
public void addResource(Resource resource) {
synchronized (lock) {
resources.add(resource);
}
}
public void closeResources() {
synchronized (lock) {
for (Resource resource : resources) {
resource.close();
}
resources.clear();
}
}
}
import java.util.concurrent.CountDownLatch;
public class ConcurrentTestExample {
private final Object lock = new Object();
private int count = 0;
public void increment() {
synchronized (lock) {
count++;
}
}
public int getCount() {
synchronized (lock) {
return count;
}
}
public static void main(String[] args) throws InterruptedException {
final ConcurrentTestExample example = new ConcurrentTestExample();
int numThreads = 10;
int numIncrementsPerThread = 1000;
final CountDownLatch latch = new CountDownLatch(numThreads);
for (int i = 0; i < numThreads; i++) {
Thread thread = new Thread(() -> {
for (int j = 0; j < numIncrementsPerThread; j++) {
example.increment();
}
latch.countDown();
});
thread.start();
}
latch.await();
System.out.println("Final count: " + example.getCount());
}
}