上代码 ` private static final Logger logger = LoggerFactory.getLogger(ThreadTest.class);
public void test_1(final AuthorizeContractBean bean){
new Thread(new Runnable() {
[@Override](https://my.oschina.net/u/1162528)
public void run() {
bean.setBorrowerId("1");
logger.info(bean.toString());
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
[@Test](https://my.oschina.net/azibug)
public void test_2(){
for (int i = 0; i < 1000; i++) {
AuthorizeContractBean b = new AuthorizeContractBean();
if(i % 2 == 0){
b.setPlatformNo("aaa");
b.setFileUrl("aaa-url");
test_1(b);
} else {
b.setPlatformNo("bbbb");
b.setFileUrl("bbb-url");
test_1(b);
}
}
}`
最终输出结果
17:43:43.077 [Thread-5] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.075 [Thread-2] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.077 [Thread-4] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.077 [Thread-3] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.075 [Thread-1] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.077 [Thread-6] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.078 [Thread-7] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.079 [Thread-8] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.079 [Thread-9] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.079 [Thread-10] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.079 [Thread-11] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
17:43:43.079 [Thread-12] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='bbb-url', platformNo='bbbb'}
17:43:43.079 [Thread-13] INFO c.i.ups.app.contract.Test.ThreadTest - AuthorizeContractBean{borrowerId='1', fileUrl='aaa-url', platformNo='aaa'}
说明bean对象的值是可以被改变的。
但是bean不能被重新指向别的引用。
总结:final修饰的对象,引用不可被改变,但对象内的值可以被改变。但普通变量只能赋值一次。 参考网址:输入链接说明