测试代码如下
@Test
public void test_2(){
List<AuthorizeContractBean> list = new ArrayList<>();
AuthorizeContractBean b = new AuthorizeContractBean();
for (int i = 0; i < 1000; i++) {
b.setBorrowerId(String.valueOf(i));
if(i % 2 == 0){
b.setPlatformNo("aaaa");
b.setFileUrl("aaa-url");
} else {
b.setPlatformNo("bbbb");
b.setFileUrl("bbb-url");
}
list.add(b);
//logger.info(b.toString());
}
for (int i = 0; i < list.size(); i++) {
logger.info(list.toString());
}
}
输出日志如下
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.420 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
16:07:59.421 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
惊呆,list里装的id都变成了999,也就是都变成了最后一个add进list的对象。
当时在封装一个带list对象的bean对象,发送给接口,再处理返回结果。返回结果发现几十个id都一样,郁闷了,以为把for循环里的i写成1了,仔细排查代码才发现。
总之,不要在for循环里改变在for循环外创建的对象,这样会出现意想不到的后果!
修改后代码如下:
@Test
public void test_2(){
List<AuthorizeContractBean> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
// 把对象的创建放进for循环里
AuthorizeContractBean b = new AuthorizeContractBean();
b.setBorrowerId(String.valueOf(i));
if(i % 2 == 0){
b.setPlatformNo("aaaa");
b.setFileUrl("aaa-url");
} else {
b.setPlatformNo("bbbb");
b.setFileUrl("bbb-url");
}
list.add(b);
//logger.info(b.toString());
}
for (int i = 0; i < list.size(); i++) {
logger.info(list.get(i).toString());
}
}
此时运行测试类,输出结果如下:
16:11:49.029 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='0', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='2', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='3', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='4', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='5', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='6', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='7', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='8', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='9', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.031 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='10',
fileUrl='aaa-url', platformNo='aaaa'}
······
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='992', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='993', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='994', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='995', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='996', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='997', fileUrl='bbb-url', platformNo='bbbb'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='998', fileUrl='aaa-url', platformNo='aaaa'}
16:11:49.073 [main] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='999', fileUrl='bbb-url', platformNo='bbbb'}
这样就可以了!输出id为i的值从0到999