【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,TextSynchronized.java,希望对大家有所帮助!
package com.zf.s14;//创建一个包
class Bank{
private double current_money = 500.0d; //存入银行的钱数
public void putNonSynDeposit(double putMoney){//存钱没有采用同步机制
System.out.println("没有采用线程同步机制,钱为" + this.current_money + "; 存钱: " + putMoney);
System.out.println("等待中......");//存钱时先等待300毫秒
try {
Thread.sleep(300);//线程休眠
} catch (Exception e) {//捕获异常
e.printStackTrace();
}
System.out.println("等待完毕进行存钱操作...");
this.current_money = this.current_money + putMoney;
System.out.println("没有采用线程同步机制,当前钱数为" + this.current_money+"元");
}
public void takeNonSynWithdraw(double takeMoney){//取钱没有同步机制
System.out.println("没有采用线程同步机制,钱为" + this.current_money + "; 取钱: " + takeMoney);
System.out.println("等待中......");//取钱时先等待500毫秒
try {
Thread.sleep(500);//线程休眠
} catch (Exception e) {//捕获异常
e.printStackTrace();
}
System.out.println("等待完毕进行取钱操作...");
this.current_money = this.current_money - takeMoney;
System.out.println("没有采用线程同步机制,当前钱数为" + this.current_money+"元");
}
public synchronized void putSynDeposit(double putMoney){//存钱有同步机制
System.out.println("采用线程同步机制,钱为" + this.current_money + "; 存钱: " + putMoney);
System.out.println("等待中......");//存钱时先等待300毫秒
try {
Thread.sleep(300);//线程休眠
} catch (Exception e) {//捕获异常
e.printStackTrace();
}
System.out.println("等待完毕进行存钱操作...");
this.current_money = this.current_money + putMoney;
System.out.println("采用线程同步机制,当前钱数为" + this.current_money+"元");
}
public synchronized void takeSynWithdraw(double takeMoney){//取钱有同步机制
System.out.println("采用线程同步机制,钱为" + this.current_money + "; 取钱: " + takeMoney);
System.out.println("等待中......");//取钱时先等待500毫秒
try {
Thread.sleep(500);//线程休眠
} catch (Exception e) {//捕获异常
e.printStackTrace();
}
System.out.println("等待完毕进行取钱操作...");
this.current_money = this.current_money - takeMoney;
System.out.println("采用线程同步机制,当前钱数为" + this.current_money+"元");
}
}
class AccessBank extends Thread{//继承Thread类实现线程方法
private Bank bank = null; //待访问的帐号对象
private String method = ""; // 访问帐号的方法
public AccessBank(Bank account, String method){//构造方法进行初始化
this.method = method;
this.bank = account;
}
public void run(){//实现Thread的方法
if (method.equals("putNonSynDeposit")){//不同参数调用不同的方法
bank.putNonSynDeposit(500.0);
} else if (method.equals("takeNonSynWithdraw")){
bank.takeNonSynWithdraw(200.0);
} else if (method.equals("putSynDeposit")){
bank.putSynDeposit(500.0);
} else if (method.equals("takeSynWithdraw")){
bank.takeSynWithdraw(200.0);
}
}
}
public class TextSynchronized {//操作展示线程同步与非同步区别的类
public static void main(String[] args) {//java程序主入口处
Bank bank = new Bank();//实例化对象
System.out.println("1.未采用同步机制时...");
Thread putMoney = new AccessBank(bank, "putNonSynDeposit");//存钱没有采用同步机制
Thread takeMoney = new AccessBank(bank, "takeNonSynWithdraw");//取钱没有同步机制
putMoney.start();//启动线程
takeMoney.start();//启动线程
try {
putMoney.join();// 等待两线程运行结束
takeMoney.join();
} catch (Exception e) {//捕获异常
System.out.println("两线程运行出错:"+e.getMessage());
}
System.out.println();
bank = new Bank();
System.out.println("2.采用同步机制时...");
putMoney = new AccessBank(bank, "putSynDeposit");//存钱有同步机制
takeMoney = new AccessBank(bank, "takeSynWithdraw");//取钱有同步机制
putMoney.start();//启动线程
takeMoney.start();//启动线程
}
}
上一篇:
TextSuperaddition.java
下一篇:
网络能耗监测系统管理端的研究与实现