多线程 —— 一个“危险”的程序

本文通过一个简单的学生信息类实例,演示了在多线程环境下未进行同步操作时可能出现的数据不一致问题。运行该示例代码多次,可以观察到由于线程间数据访问和修改的无序性导致的不安全现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值