标签: atomicinteger

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

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

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 …
Run Code Online (Sandbox Code Playgroud)

java thread-safety atomicinteger

1
推荐指数
1
解决办法
33
查看次数

AtomicInteger中的get()vs intValue()方法

AtomicIntegerclass有2个方法,get()intValue()有以下定义.

intValue() 定义:

/**
 * Returns the value of this {@code AtomicInteger} as an {@code int}.
 */
public int intValue() {
    return get();
}
Run Code Online (Sandbox Code Playgroud)

get() 定义:

/**
 * Gets the current value.
 *
 * @return the current value
 */
public final int get() {
    return value;
}
Run Code Online (Sandbox Code Playgroud)

有一个非最终方法intValue()有什么好处?出于所有实际目的,如果我没有错,我们可以使用get方法.请解释这种做法是否有任何好处.

java oop integer atomicinteger

0
推荐指数
1
解决办法
163
查看次数

如何在休眠中保留 AtomicInteger 而不是 Integer?

我尝试 使用hibernate java 框架持久保存一个具有AtomicInteger变量而不是Integer 的对象(保存后我需要在线程安全场景中使用该对象),但是当我尝试保存我的对象时,java 抛出:

java.lang.ClassCastException: java.util.concurrent.atomic.AtomicInteger cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将 AtomicInteger 映射到整数吗?有一个对象的例子:

public class Statistics implements java.io.Serializable {
  private AtomicInteger id;
  private AtomicInteger totalErrors;

  public Statistics() {
  }


  public AtomicInteger getTotalErrors() {
    return this.totalErrors;
  }

  public void seTotalErrors(AtomicInteger totalErrors) {
    this.totalErrors= totalErrors;
  }
}
Run Code Online (Sandbox Code Playgroud)

以及相应的 POJO xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
   <class name="Statistics" table="statistics" catalog="example" optimistic-lock="version">
      <id name="id" type="java.lang.Integer">
         <column name="id" />
         <generator …
Run Code Online (Sandbox Code Playgroud)

java multithreading hibernate jpa atomicinteger

0
推荐指数
1
解决办法
2858
查看次数

在JUnit测试中,AtomicInteger不会增加

我有以下JUnit测试,并且无法解决为什么第二个测试没有通过,i两个测试中的值都是1.

public class TestTest {

  private AtomicInteger ai = new AtomicInteger(1);

  @Test
  public void test1() {
    int i = ai.getAndIncrement();
    Assert.assertEquals(1, i);
  }

  @Test
  public void test2() {
    int i = ai.getAndIncrement();
    Assert.assertEquals(2, i);
  }
}
Run Code Online (Sandbox Code Playgroud)

test1传递并test2失败,并显示以下消息:

java.lang.AssertionError: 
Expected :2
Actual   :1
Run Code Online (Sandbox Code Playgroud)

java junit increment atomicinteger

0
推荐指数
1
解决办法
358
查看次数