Java并发编程5 —— 并发脏读问题

两个线程同时修改共享数据容易产生线程安全问题。如果是在数据库中,一条数据由很多个字段组成,假设一个线程要去修改其中几个字段的值,与此同时有另一个线程想要读取这条数据,那么会产生什么问题呢。

下面的代码中,Student类有学号id、姓名name、专业名dprt三个属性。某同学申请转专业,需要修改他的学号和专业名。修改学号和专业名需要1秒钟完成,同时有另一个线程在查他的信息,查询速度很快。

import static java.lang.Thread.sleep;

public class DirtyRead {
    public static void main(String[] args) {
        Student student = new Student(105, "Peter", "Physics");
        SetInfo setInfo = new SetInfo(student);
        GetInfo getInfo = new GetInfo(student);
        Thread set = new Thread(setInfo);
        Thread get = new Thread(getInfo);
        set.start();
        get.start();
    }
}

class SetInfo implements Runnable{
    private Student student;

    public SetInfo(Student student){
        this.student = student;
    }

    @Override
    public void run() {
        student.setInfo(205, "Math");
    }
}

class
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值