/** * 出现有些没加入list的原因:线程一拿走了这个list当时里面有10个数据,添加一个变成11个 * 线程二同时拿走了这个list,当时里面有10个数据,添加一个变成11个(但是正常应该是12个,也就是线程1添加的那个数据没有了) */ public class Ticket implements Runnable{ private List<String> list = new ArrayList<>(); public void run(){ for(int i=0;i<300;i++){ try { // 调用Thread类的sleep方法,休眠50ms,由于父接口没有throws异常,so我们只能用try...catch Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } list.add("xxx,"); System.out.println(list.size()); } } }
结论:多线程操作同一个全局变量,加上线程锁吧