首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果循环是线程安全的,则线程安全

如果循环是线程安全的,则线程安全
EN

Stack Overflow用户
提问于 2021-06-09 14:18:17
回答 1查看 35关注 0票数 1

这个问题中的while循环是线程安全的:AtomicInteger thread safety。如果我在线程安全的while循环中插入randomSum方法,代码仍然是线程安全的吗?或者应该同步randomSum方法?

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class Print implements Runnable {
    static AtomicInteger atomicInteger = new AtomicInteger(0);
    static Random random = new Random(1);

    public static int randomSum() {
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            sum += random.nextInt();
        }
        return sum;
    }

    @Override
    public void run() {
        while (atomicInteger.getAndIncrement() < 100)
            System.out.println(randomSum() + " " + Thread.currentThread());
    }

    public static void main(String[] args) throws InterruptedException {
        ArrayList<Thread> threads = new ArrayList<>();

        for (int i = 0; i < 5; i++)
            threads.add(new Thread(new Print()));

        for (Thread thread : threads)
            thread.start();

        for (Thread thread : threads)
            thread.join();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-06-09 14:31:19

randomSum方法是线程安全的,它的使用也是如此。

唯一的共享对象是random。Java API文档指出,java.util.Random的实例是线程安全的,但如果并发使用(可能是由于同步),则可能会遇到性能问题,如果性能有问题,则应考虑使用ThreadLocalRandom

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67898577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档