-
public synchronized void setName(String name);
-
synchronized(this);
-
synchronized(arrayList){arrayList.add(new someClass());}
例如:
package testsynchronized;
class Student {
private String name;
private String id;
public String getName() {
return name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
public class TestSynchronized {
Student student = new Student();
Integer number;
TestSynchronized() {
for (int i = 0; i < 100; i++) {
new Thread(new Runnable() {
public void run() {
while (true) {
setNameAndId();
}
}
}).start();
}
}
//去除掉synchronized关键字进行测试,发现多线程下会产生数据不同步
synchronized void setNameAndId() {
number = new Integer((int) (100 * Math.random()));
student.setName(number.toString());
student.setId(number.toString());
if (!student.getName().equals(student.getId())) {
System.out.println("The name of student: " + student.getName()
+ " is not equal with his id " + student.getId());
}
}
public static void main(String[] str) {
new TestSynchronized();
System.out.println("The main function has ended!");
}
}
本文通过一个具体的例子演示了如何使用synchronized关键字来确保多线程环境下数据的一致性和同步性。通过对Student类的setName和setId方法的同步操作,验证了在没有同步机制的情况下可能会导致的数据不一致问题。
1478

被折叠的 条评论
为什么被折叠?



