-
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!");
}
}