java - 通过代码链同步

标签 java synchronization

有人可以告诉我,在“myClass”中执行 run 命令的 Java 线程(在下面的代码中)是否在 CustomList 的 get() 命令获取对象的时间和 myClass 的 run 请求的时间之间失去对象的同步同一对象的同步?

如果初始线程保持同步,则由 CustomList 的 get 命令创建的“myThread”的中心代码应该永远无法触发,直到原始线程完成请求的对象。

public class myClass implements Runnable {

    private CustomList list;

    public myClass(){
        list = new CustomList();
        //Code to pack "list" goes here.
    }

    public void run(){
        int position = 0;
        while(position<list.size()){
            synchronized(list.get(position)){
                //Opperation's central code.
            }
            position++;
        }
    }

    public class CustomList extends ArrayList<Object> {

        public CustomList(){
            super();
        }

        public Object get(int i){
            Object o = super.get(i);
            synchronized(o){
                myThread thread = new myThread(o);
                thread.start();
                return o;
            }
        }

    }

    public class myThread extends Thread {

        private Object subject;

        public myThread(Object o){
            subject = o;
        }

        public void run(){
            synchronized(subject){
                //Do something to "subject"
                //BUT only AFTER the original Thread is finished with it.
            }
        }

    }

}

最佳答案

答案是肯定的。鉴于您提供的代码,您的 CustomList 不是线程安全的。

要解决此问题,请停止尝试自定义同步。你对它的理解还不够深入。相反,使用 java.util.Collections.synchronizedList() 来包装 java.util.ArrayList 的实例。

private List<Object> list = Collections.synchronizedList(new ArrayList<Object>());

关于java - 通过代码链同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28018313/

相关文章:

java - equals() 方法不适用于字符串

mysql - 将本地数据库数据同步到远程数据库

java - 如何同步线程

synchronization - Union 选项 `prefer=newer` 和 `force=newer` 之间有什么区别?

java - HashSet 相对于 ArrayList 的优势,反之亦然

java - OpenCV 中分水岭分割的图像格式不匹配

java - android jar导入到另一个项目时出现异常

java - 为什么 Ruby 比 Java 慢那么多?

python - P4Python 问题 : p4run ("files", 'path' )返回 - 没有这样的文件,尽管返回 "dirs"的单个项目字典

java - ReentrantLock.Sync 中当前线程变量的搭载是如何工作的?