尝试创建一个java线程,检查列表';当主程序不断向列表中添加元素时,s的大小大于x
基本思想是这样的:我有一个叫做Testing的类,在这个类中,有一个字符串的ArrayList。我启动了一个新线程,当我的测试对象中的列表大小超过10时,他的唯一目的就是死亡,而主程序一直在向列表中添加字符串。由于某种原因,我在主程序上遇到了一个无限循环,这意味着线程没有消亡 下面是thread类的代码尝试创建一个java线程,检查列表';当主程序不断向列表中添加元素时,s的大小大于x,java,multithreading,arraylist,Java,Multithreading,Arraylist,基本思想是这样的:我有一个叫做Testing的类,在这个类中,有一个字符串的ArrayList。我启动了一个新线程,当我的测试对象中的列表大小超过10时,他的唯一目的就是死亡,而主程序一直在向列表中添加字符串。由于某种原因,我在主程序上遇到了一个无限循环,这意味着线程没有消亡 下面是thread类的代码 public class TestingThread implements Runnable{ pu
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)
,这是第一个参数。除此之外,它应该像预期的那样工作。我修正了这一点,当我在这里键入所有内容时,它是一个打字错误,而不是在主代码上。出于某种原因,它偶尔工作一次,但大多数时候它只是一个无限循环。。。还有其他想法吗?如果两个线程之间没有同步,就不能保证“测试线程”看到主线程所做的更改。你能发布完整的程序,包括“测试”类吗?