Java--银行存取款线程设计2(线程互斥)

来源:互联网 发布:梯度的分水岭算法 编辑:程序博客网 时间:2024/05/16 07:36

同步:对象锁的概念。如果多个线程共享某一个对象,操作系统会为每个对象用一个单词生成一个锁,锁和对象一一对应。如果一个线程要对某个对象进行操作,必须拿到对象的锁。
加锁:同步语句或者同步方法(这里用了同步语句)。解决交互线程与时间有关的错误。
注:互斥锁必须是同一个对象,否则锁不住。

public class save extends Thread{    private account a;    private double value;    public save(account a, double value) {        this.a = a;        this.value = value;    }    public void run() {        synchronized (a) {            double b = a.getBalance();            a.put(value);            System.out.println(a.getName() + "账户,现有" + b + ",存入" + value                    + ",余额" + a.getBalance());        }    }}
package cn.hncu.thread.motion;public class fetch extends Thread{    private account a;    private double value;    public fetch(account a, double value) {        this.a = a;        this.value = value;    }    public void run() {        synchronized (a) {//拿锁            double b = a.getBalance();            System.out.println(a.getName() + "账户,现有" + b + ",取出" + a.get(value)                    + ",余额" + a.getBalance());        }//出了同步语句之后解锁    }}
package cn.hncu.thread.motion;public class bank {    public static void main(String[] args) {//      account a1=new account("wang");//      save s1=new save(a1,100);//      save s1=new save(new account("wang"),100);//      s1.start();        account a1=new account("wang");        new save(a1,100).start();        new save(a1,200).start();        new fetch(a1,300).start();        new save(new account("xu"),100).start();    }}
1 0
原创粉丝点击