如何解决Java多线程同步问题?实例演示

原创 ゞ 浴缸里的玫瑰 2024-11-14 17:36 126阅读 0赞

在Java中,多线程同步主要是通过synchronized关键字、wait/notify机制和Lock接口来实现的。

  1. synchronized关键字:
    在单个 synchronized 块上,同一时间只能有一个线程执行该块。例如:
  1. class Counter {
  2. private int count = 0;
  3. public synchronized void increment() {
  4. count++;
  5. }
  6. public synchronized int getCount() {
  7. return count;
  8. }
  9. }
  10. public class ThreadSyncExample {
  11. public static void main(String[] args) {
  12. Counter counter = new Counter();
  13. // 创建两个线程
  14. Thread thread1 = new Thread(() -> {
  15. for (int i = 0; i < 5; i++) {
  16. counter.increment();
  17. try {
  18. // 线程休眠,模拟其他线程操作
  19. Thread.sleep(200);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }));
  25. Thread thread2 = new Thread(() -> {
  26. for (int i = 0; i < 5; i++) {
  27. counter.getCount(); // 每次调用都可能阻塞,直到计数器变化
  28. try {
  29. // 线程休眠,模拟其他线程操作
  30. Thread.sleep(200);
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }));
  36. // 启动线程
  37. thread1.start();
  38. thread2.start();
  39. // 等待所有线程结束
  40. try {
  41. thread1.join();
  42. thread2.join();
  43. } catch (InterruptedException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. }

在这个例子中,我们创建了一个Counter类,它的increment方法用于增加计数器的值,而getCount方法每次调用都可能阻塞。

两个线程分别调用这两个方法,并在操作之间插入休眠,模拟其他线程的交互。最后,我们等待所有线程结束。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读