多线程-线程同步问题

来源:互联网 发布:马克斯cms手机站 编辑:程序博客网 时间:2024/05/29 14:50

多线程编程 由于系统的线程调度具有一定的随机性 所以当多个线程来访问一个数据时 会偶尔出现线程安全问题

有以下几个方法:
1.同步代码块(使用synchronized)
2.同步方法(提供一个线程安全的的方法实现)
3.同步锁(定义锁对象 加锁 释放锁)

实体类

package Tongbu;public class Account {    private String AccountNo;    private double balance;    public String getAccountNo() {        return AccountNo;    }    public void setAccountNo(String accountNo) {        AccountNo = accountNo;    }    public double getBalance() {        return balance;    }    public void setBalance(double balance) {        this.balance = balance;    }    public Account() {        super();        // TODO Auto-generated constructor stub    }    public Account(String accountNo, double balance) {        super();        AccountNo = accountNo;        this.balance = balance;    }}

线程类

package Tongbu;public class DrawThread extends Thread {    private Account account;    private int drowAccount;    public DrawThread(String name,Account account, int i) {        super(name);        this.account = account;        this.drowAccount = i;    }    public void run() {        /*使用account作为同步监视器 任何线程进入下面同步代码块之前必须获得acccout账户的锁定         其他线程无法获得锁  加锁 修改 释放锁        */        synchronized (account) {        if(account.getBalance()>=drowAccount) {            System.out.println(getName()+"取钱成功  吐出钞票  "+drowAccount);            try {                Thread.sleep(1);            }catch(InterruptedException ex) {                ex.printStackTrace();            }            account.setBalance(account.getBalance()-drowAccount);            System.out.println("\t余额为:"+account.getBalance());        }else {            System.out.println(getName()+"取钱失败  余额不足");            }        }        //同步代码块结束 该线程释放同步锁    }}

测试类

package Tongbu;public class DrawTest {    public static void main(String[] args) {        //创建一个账户        Account acct=new Account("12345",1000);        //模拟多个线程对同一账户取钱        new DrawThread("甲", acct, 800).start();        new DrawThread("乙", acct, 800).start();        new DrawThread("丙", acct, 200).start();    }}
原创粉丝点击