【问题标题】:How can i make java collection classes synchronised, without using Collections Class methods?如何在不使用 Collections Class 方法的情况下使 java 集合类同步?
【发布时间】:2017-09-18 13:03:07
【问题描述】:

如何在不使用 Collections Class 方法的情况下使集合类同步?有没有替代课?或者我可以覆盖 ArrayList 类的方法,然后使其同步?

【问题讨论】:

  • 为什么不能使用Collections 类方法?它们听起来是您问题的最佳解决方案...
  • @SocraticPhoenix 考虑一种情况,我想让我自己的类为特定对象而不是所有对象同步。我该如何实现?

标签: java multithreading arraylist synchronization


【解决方案1】:

要同步任何对象,您可以使用处理同步的调用处理程序并在要同步的对象上创建代理。例如:

public static class Synchronizer implements InvocationHandler{

    private final Object objectToSync;

    public Synchronizer(Object objectToSync){
        this.objectToSync = objectToSync;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        synchronized (objectToSync){
            return method.invoke(objectToSync, args);
        }
    }
}

public static void main(String ... args) {

    List<Integer> originalList = new ArrayList<>();

    List<Integer> syncList = (List<Integer>) Proxy.newProxyInstance(Synchronizer.class.getClassLoader(), new Class[]{List.class}, new Synchronizer(originalList));

}

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多