尝试创建一个java线程,检查列表';当主程序不断向列表中添加元素时,s的大小大于x

尝试创建一个java线程,检查列表';当主程序不断向列表中添加元素时,s的大小大于x,java,multithreading,arraylist,Java,Multithreading,Arraylist,基本思想是这样的:我有一个叫做Testing的类,在这个类中,有一个字符串的ArrayList。我启动了一个新线程,当我的测试对象中的列表大小超过10时,他的唯一目的就是死亡,而主程序一直在向列表中添加字符串。由于某种原因,我在主程序上遇到了一个无限循环,这意味着线程没有消亡 下面是thread类的代码 public class TestingThread implements Runnable{ pu

基本思想是这样的:我有一个叫做Testing的类,在这个类中,有一个字符串的ArrayList。我启动了一个新线程,当我的测试对象中的列表大小超过10时,他的唯一目的就是死亡,而主程序一直在向列表中添加字符串。由于某种原因,我在主程序上遇到了一个无限循环,这意味着线程没有消亡

下面是thread类的代码

public class TestingThread implements Runnable{                                           
    public Testing t;                          

    public TestingThread(Testing t) {                                  
        this.t = t;                                  
    }                                                  

    @Override                                          
    public void run() {                                
        while(true){                                   
            if(t.words.size() > 10) break;            
        }                                              
    }                                                  
}
测试类中最重要的是它有一个公共属性列表单词

这就是我主要尝试的:

public static void main(String[] args) {
    Testing t = new Testing();
    Thread myThread = new Thread(new TestingThread(t));
    myThread.start();

    while(true){
        if(!myThread.isAlive()) break;
        t.words.add("hello");
        System.out.println("adding...");
    }
    System.out.println(ts.words.toString());

    // joining the thread to the main thread at the end of the code
    try {  
        myThread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
        System.out.println("something went wrong");
    }
}

myThread.isAlive()始终返回true,这意味着线程从未完成while循环,这意味着它无法识别列表的大小是否超过10。我找不到解决这个问题的办法。有什么建议吗?我应该改变我的方法吗?

我在代码中看到一个错误
newtestingread(0,t)
,这是第一个参数。除此之外,它应该像预期的那样工作。我修正了这一点,当我在这里键入所有内容时,它是一个打字错误,而不是在主代码上。出于某种原因,它偶尔工作一次,但大多数时候它只是一个无限循环。。。还有其他想法吗?如果两个线程之间没有同步,就不能保证“测试线程”看到主线程所做的更改。你能发布完整的程序,包括“测试”类吗?我在代码中看到一个错误
newtestingread(0,t)
,这是第一个参数。除此之外,它应该像预期的那样工作。我修正了这一点,当我在这里键入所有内容时,它是一个打字错误,而不是在主代码上。出于某种原因,它偶尔工作一次,但大多数时候它只是一个无限循环。。。还有其他想法吗?如果两个线程之间没有同步,就不能保证“测试线程”看到主线程所做的更改。你能发布完整的程序,包括“测试”类吗?