在這個案例中,我們將創建一個簡單的Spring Boot應用程序,該應用程序使用synchronized
關鍵字來確保線程安全。我們將創建一個計數器類,該類可以在多個線程之間共享,并使用synchronized
方法來確保在同一時間只有一個線程可以修改計數器的值。
首先,創建一個新的Spring Boot項目。你可以使用Spring Initializr(https://start.spring.io/)生成一個基本的項目結構。
在項目中創建一個名為Counter
的類,用于存儲計數器的值,并提供線程安全的方法來修改和獲取該值。
public class Counter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized void decrement() {
count--;
}
public synchronized int getCount() {
return count;
}
}
CounterService
的類,用于處理與計數器相關的業務邏輯。import org.springframework.stereotype.Service;
@Service
public class CounterService {
private final Counter counter;
public CounterService(Counter counter) {
this.counter = counter;
}
public void increment() {
counter.increment();
}
public void decrement() {
counter.decrement();
}
public int getCount() {
return counter.getCount();
}
}
CounterController
的類,用于處理HTTP請求。import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/counter")
public class CounterController {
private final CounterService counterService;
public CounterController(CounterService counterService) {
this.counterService = counterService;
}
@GetMapping
public int getCount() {
return counterService.getCount();
}
@PostMapping("/increment")
public void increment() {
counterService.increment();
}
@PostMapping("/decrement")
public void decrement() {
counterService.decrement();
}
}
synchronized
關鍵字也確保了線程安全。這個案例展示了如何在Spring Boot應用程序中使用synchronized
關鍵字來實現線程安全。然而,需要注意的是,synchronized
關鍵字可能會導致性能問題,因為它會阻塞其他線程直到當前線程完成操作。在高并發場景下,可以考慮使用更高效的并發工具,如java.util.concurrent
包中的原子類和鎖。