多线程并发问题:Java线程安全问题实例

原创 向右看齐 2024-12-12 11:21 180阅读 0赞

Java中的线程安全问题主要发生在共享资源访问不当时。以下是一个具体的实例:

例1:多个线程同时修改一个集合

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class ThreadSafeExample {
  4. private List<String> sharedList = new ArrayList<>();
  5. public void addString(String str) {
  6. // 不安全的添加方式
  7. sharedList.add(str);
  8. }
  9. public List<String> getSharedList() {
  10. return sharedList;
  11. }
  12. public static void main(String[] args) {
  13. ThreadSafeExample example = new ThreadSafeExample();
  14. Thread thread1 = new Thread(() -> {
  15. for (int i = 0; i < 5; i++) {
  16. example.addString("Thread " + i);
  17. }
  18. }));
  19. Thread thread2 = new Thread(() -> {
  20. for (int i = 0; i < 5; i++) {
  21. if (i == 1) {
  22. // 模拟线程同步,阻止对共享资源的访问
  23. synchronized (example.getSharedList()) {
  24. example.addString("Thread " + i);
  25. }
  26. } else {
  27. example.addString("Thread " + i);
  28. }
  29. }
  30. }));
  31. thread1.start();
  32. thread2.start();
  33. // 等待两个线程完成操作
  34. try {
  35. thread1.join();
  36. thread2.join();
  37. } catch (InterruptedException e) {
  38. e.printStackTrace();
  39. }
  40. System.out.println("Shared List: " + example.getSharedList()));
  41. }
  42. }

在这个例子中,我们创建了两个线程(thread1和thread2),它们同时修改一个共享的ArrayList<String>

由于我们在添加字符串时没有对共享资源进行同步,这就可能导致数据不一致或线程安全问题。

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

发表评论

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

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

相关阅读

    相关 Java 线并发问题实例

    在Java多线程环境中,常见的并发问题包括死锁、活锁、饥饿现象、资源泄露等。以下是一个简单的例子来说明这些问题: 1. 死锁: ```java // 线程A public c