public class Test {
static List list = new ArrayList<>();
Object object = new Object();
public List getList() {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (object) {
list.add("1");
}
}
}).start();
return list;
}
}
没有等待子线程就return 了,所以所以没有执行 list.add("1");
你新起了一个线程往list中添加数据,这是异步的,return list可能会先执行,这时还没有添加数据,list就是空的。
在多线程代码外加一个死循环,跳出循环的条件为所有线程执行完毕即可解决
你可以让线程sleep一段时间再看结果。多线程刚上手很容易因为不了解运行过程而得不到预期结果,最好等程序都运行完了再看。
没有看到有main方法,需要在main中执行getList();如下debug看下list或者打印log日志看看
public static void main(String[] args) {
getList();
}
start不能说明线程一定要执行,只是声明它是一个可执行的状态。
getList方法中首先new了一个新的线程,并声明它为可执行状态,之后又将list返回出去。
这样new出来的新线程还没有来及执行,更别说list.add了。
ps:将new的线程提取出来调用thread.join()方法便可以达到预期效果,但这将代表你放弃了异步执行,当线程执行完毕并入到main线程中。