当前位置:  首页>> 技术小册>> Java面试指南

Synchronized关键字介绍

在Java中,Synchronized是一种关键字,它可以用来控制并发访问,从而实现线程安全。Synchronized关键字可以应用于方法和代码块,具体实现是通过对象锁来实现的,即每个对象都有一个锁,只有获取了这个锁的线程才能访问这个对象的Synchronized方法或代码块。

下面是一个使用Synchronized的示例:

  1. public class Counter {
  2. private int count;
  3. public synchronized void increment() {
  4. count++;
  5. }
  6. public synchronized int getCount() {
  7. return count;
  8. }
  9. }
  10. public class Main {
  11. public static void main(String[] args) {
  12. Counter counter = new Counter();
  13. Thread t1 = new Thread(() -> {
  14. for (int i = 0; i < 10000; i++) {
  15. counter.increment();
  16. }
  17. });
  18. Thread t2 = new Thread(() -> {
  19. for (int i = 0; i < 10000; i++) {
  20. counter.increment();
  21. }
  22. });
  23. t1.start();
  24. t2.start();
  25. try {
  26. t1.join();
  27. t2.join();
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. System.out.println(counter.getCount());
  32. }
  33. }

在上面的代码中,我们创建了一个Counter类,其中使用了Synchronized关键字来保证increment()和getCount()方法的原子性。我们创建了两个线程来分别对count变量进行10000次自增操作,并在主线程中等待两个线程执行完毕后输出count变量的值。

由于使用了Synchronized,我们可以确保每个线程都能够正确地自增count变量,并且最终输出的结果也是正确的。需要注意的是,Synchronized虽然能够保证线程安全,但是也会带来一些性能上的损失,因为在获取锁的过程中可能会发生阻塞,从而影响程序的运行效率。因此,在实现线程安全的时候需要根据具体情况选择合适的方案。


该分类下的相关小册推荐: