首页 > 解决方案 > 为什么stringbuilder在线程同时读写时不抛出并发修改异常

问题描述

我正在尝试使用 junit 测试用例生成并发修改异常。在这种情况下,由于 stringbuilder 不是线程安全的,它应该在读取和写入同时发生时给出异常。我多次运行它并获得无限循环输出但没有并发异常。如何使用此代码生成并发修改异常?

package com.blog.article.threading.example;

public class Logger {

    private StringBuilder contents = new StringBuilder();

    public void log(String message) {
        contents.append(Thread.currentThread().getName());
        contents.append(message);
        contents.append("\n");
    }

    public String getContents() {
        return contents.toString();
    }
}

测试类:

package com.blog.article.threading.example;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class LoggerTest extends Thread {

    @InjectMocks
    Logger logger;

    @Test
    public void testWithStringBuilderObject() throws InterruptedException {
        for (int i = 0; i <= 5; i++) {
            Thread t = new Thread() {
                public void run() {
                    int i = 0;
                    while (true) {
                        logger.log("A");
                        System.out.println(logger.getContents());
                        try {
                            Thread.sleep(20);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            };
            t.start();
        }

        while (true) {
            System.out.println("Main Thread");
        }
    }
}

摇篮依赖:

plugins {
    id 'java-library'
}

repositories {
    jcenter()
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'

    repositories { jcenter() }

    dependencies { testImplementation 'org.mockito:mockito-core:2.7.22' }
    implementation 'com.google.guava:guava:28.0-jre'

    testImplementation 'junit:junit:4.12'
}

标签: junit4java.util.concurrent

解决方案


推荐阅读