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();
    }
}