文档详情

五种Java多线程同步的方法.doc

发布:2017-03-28约7.25千字共7页下载文档
文本预览下载声明
五种Java 多线程同步的方法 这篇文章主要介绍了五种Java 多线程同步的方法,需要的朋友可以参考下 为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举 个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果 呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0.那到底是哪个呢?很难说清楚。因此多线程同步就是要解决这个问题。 一、不同步时的代码 Bank.java package threadTest; /** * @author ww * */public class Bank { private int count =0;//账户余额 //存钱 public void addMoney(int money){ count +=money; System.out.println(System.currentTimeMillis()+存进:+money); } //取钱 public void subMoney(int money){ if(count-money 0){ System.out.println(余额不足); return; } count -=money; System.out.println(+System.currentTimeMillis()+取出:+money); } //查询 public void lookMoney(){ System.out.println(账户余额:+count); } } SyncThreadTest.java package threadTest; public class SyncThreadTest { public static void main(String args[]){ final Bank bank=new Bank(); Thread tadd=new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } bank.addMoney(100); bank.lookMoney(); System.out.println(\n); } } }); Thread tsub = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while(true){ bank.subMoney(100); bank.lookMoney(); System.out.println(\n); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); tsub.start(); start(); } } 代码很简单,我就不解释了,看看运行结果怎样呢?截取了其中的一部分,是不是很乱,有写看不懂。 余额不足 账户余额:0 余额不足 账户余额:100
显示全部
相似文档