如何将普通旧Java类转换为原子类?

时间:2016-06-09 04:37:11

标签: java multithreading concurrency

说我有以下课程

public class Hello {
    private int first = 0;
    private String result = "";
    private Queue<Integer> queue1 = new Queue<>();
    private Queue<Integer> queue2 = new ConcurrentLinkedQueue<>();

    public int getFirst() {
      return first;
    }

    public void setFirst(int first) {
      this.first = first;
    }

    public String getResult() {
      return result;
    }

    public void setResult(String result) {
      this.first = first;
    }

    public void addQueue1(int number) {
       queue1.add(number);
    }

    public void addQueue12(int number) {
       queue2.add(number);
    }

}

现在假设多个线程想要修改此类的实例。有没有办法可以将整个类Atomic转为使用同步关键字?换句话说多个线程可以调用任何getter或setter但是实例需要原子地修改?我怎样才能使用AtomicReference并将其更改为线程安全类?

1 个答案:

答案 0 :(得分:1)

一个类不能是原子的;只有动作可以是原子的。

没有办法说“这个类上的所有动作都必须是原子的”,因为它的定义太不明确了。你需要一种方式说“这些束和一组形成一个原子,但这些束形成另一个原子。”定义它的方法是通过synchronized块 - 这正是它们的用途。