1、竞争资源
public class Student {
String name;
Integer age;
}
2、设置和获取的线程
public class SetThread implements Runnable {
private Student s;
public SetThread(Student s){
this.s =s;
}
@Override
public void run() {
s.age = 29;
s.name = "liwei";
}
}
public class GetThread implements Runnable {
private Student s;
public GetThread(Student s){
this.s = s;
}
@Override
public void run() {
System.out.println(s.name + " --- " + s.age);
}
}
3、测试方法
/**
* Created by liwei on 16/7/18.
*
* 就这样运行,多运行几次,会出现 null --- 29 这样的结果,这是因为没有加锁的原因,产生了多线程不安全数据访问和设置不安全的现象
*
*/
public class StudentDemo {
public static void main(String[] args) {
// 创建资源
Student s = new Student();
// 设置和获取的类
GetThread gt = new GetThread(s);
SetThread st = new SetThread(s);
// 线程类
Thread t1 = new Thread(gt);
Thread t2 = new Thread(st);
// 启动线程
t1.start();
t2.start();
}
}