“ Love is the only force capable of transforming an enemy into friend. ”
—— Martin Luther King, Jr.
“爱是把敌人变成朋友的唯一力量。”
——小马丁·路德·金
“ To love and win is the best thing. To love and lose, the next best. ”
—— William Makepeace Thackeray
2019.07.21问题及解析
public class Test {
private List<String> list = new ArrayList<>();
private synchronized void add(String str){
list.add(str);
}
private synchronized void print(){
for (String s : list) {
System.out.print(s);
}
}
public static void main(String[] args) {
Test test = new Test();
for(int i = 0; i < 2; i++){
new Thread(() -> {
test.add("a");
test.add("b");
test.add("c");
test.print();
}).start();
}
}
}
请问上述代码输出的结果可能为?
A.abcabc
B.abcabcabc
C.abcabcabcabc
D.aabbccaabbcc
E.运行异常
F.编译错误
多线程同时执行时可能会产生线程冲突
从而使同一个代码产生出多种不同的结果
main方法中首先new了一个Test对象
通过for循环开启了两个线程均调用test实例的add方法与print方法
按通常的执行结果第一个线程添加a、b、c后输出abc
第二个线程添加a、b、c后输出abcabc
总共输出的结果为abcabcabc
因此线程正常执行最少输出abcabcabc,因此A选项错误
发生线程冲突时可能会在第一个线程添加abc时,第二个线程也进行添加abc
因此可能存在两个线程添加完毕后才开始执行打印,可能为第一个线程每添加一个字母第二个线程也添加一个字母,也可能第一个线程添加完后第二个线程再添加最后两个一起打印,对应的结果即为
abcabc(第一个线程打印)abcabc(第二个线程打印)
aabbcc(第一个线程打印)aabbcc(第二个线程打印)
答案选BCD。
2019.07.22问题
线程——多线程
hashcode——作用效果
下列正确的是?
A.如果a.equals(b)为true,那么a,b两个对象hashcode一定相同
B.一个类所有实例的hashcode都不同
C.如果两个对象的hashcode相同,作为同一个HashMap的key时,返回的value一定相同
D.如果a,b两个对象的hashcode相同,a.equals(b)一定为true
重磅推荐
以我手写我心,有位伟人说过,
整理记录是最高效的学习方法。
在这里即可一展所学,
不仅可以与同辈交流
还可与前辈过招