首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Mulithreaded CopyONWriteArrayList

Java Mulithreaded CopyONWriteArrayList
EN

Stack Overflow用户
提问于 2017-04-04 02:46:55
回答 1查看 51关注 0票数 1

我想使用多线程代码可以经常访问的数据结构。请让我知道java中的任何数据结构,在那里我可以等待并使用通知选项。请参阅下面的代码,为什么CDRemove的run方法不打印所有值

代码语言:javascript
复制
public class ConcurrencyDemo {

    public static void main(String[] args) throws InterruptedException {
        CopyOnWriteArrayList<String> threadSafeList = new CopyOnWriteArrayList<String>();
        CDInsert cd1 = new CDInsert(threadSafeList);
        CDRemove cr1 = new CDRemove(threadSafeList);
        cd1.start();

        cr1.start();
    }
}

class CDInsert extends Thread
{
    List threadSafeList;

    public CDInsert(List threadSafeList) {
         this.threadSafeList = threadSafeList;
    }

    public void run()
    {
        int counter = 0;
        while(counter < 20){
            counter++;
            threadSafeList.add(String.valueOf(counter));
            System.out.println("Counter value is "+counter);
        }
    }

    public void showItem(){
        Iterator<String> failSafeIterator = threadSafeList.iterator();
        while(failSafeIterator.hasNext()){
            System.out.printf("Read from CopyOnWriteArrayList : %s %n", failSafeIterator.next());
        }
    }
}

class CDRemove extends Thread {
    List threadSafeList;

    public CDRemove(List threadSafeList) {
        this.threadSafeList = threadSafeList;
    }

    public void run(){

        Iterator<String> failSafeIterator = threadSafeList.iterator();
        System.out.println("Fail Safe Iterator is "+failSafeIterator);
        while(true){
            System.out.println("Fail Safe Iterator is "+failSafeIterator);  
            while(failSafeIterator.hasNext()){
                System.out.printf("Read from CopyOnWriteArrayList : %s %n", failSafeIterator.next());
            }
        }
    }
} 
EN

回答 1

Stack Overflow用户

发布于 2017-04-04 03:09:43

线程CDRemove有一个无限循环:

代码语言:javascript
复制
 while(true){ // Change this.
     while(failSafeIterator.hasNext()){
        System.out.printf("Read from CopyOnWriteArrayList : %s %n", failSafeIterator.next());
    }
    }

现在,迭代器将在构造时表示列表的状态。如果CDInsert线程仍在运行,迭代器将不会拥有所有元素。

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

https://stackoverflow.com/questions/43192112

复制
相关文章

相似问题

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