java 應用線程做的一個簡略的ATM存取款實例代碼。本站提示廣大學習愛好者:(java 應用線程做的一個簡略的ATM存取款實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java 應用線程做的一個簡略的ATM存取款實例代碼正文
完成Runnable接口。當一個線程已繼續了另外一個類時,就只能用完成Runnable接口的辦法來創立線程,且便於堅持法式作風的分歧性。
我們曉得,一個具有性命的線程,具有上面五種狀況:
創立狀況
應用new運算符創立一個線程後,該線程僅僅是一個空對象,體系沒有分派資本,稱該線程處於創立狀況(new thread)
可運轉狀況
應用start()辦法啟動一個線程後,體系為該線程分派了除CPU外的所需資本,使該線程處於可運轉狀況(Runnable)
運轉中狀況
Java運轉體系經由過程調劑選中一個Runnable的線程,使其占領CPU並轉為運轉中狀況(Running)。此時,體系真正履行線程的run()辦法。
壅塞狀況
一個正在運轉的線程因某種緣由不克不及持續運轉時,進入壅塞狀況(Blocked)
逝世亡狀況
線程停止後是逝世亡狀況(Dead)
空話不多說,上面直接上代碼:
Java代碼:
package pack.java.thread.atm;
/**
* 賬戶類;
* @author Administrator
*
*/
public class Account {
private String name; //用戶名;
private int value; //賬戶余額;
/**
* 存入金額;
* @param monery
*/
public void putMonery(int monery){
this.value = this.value + monery;
}
/**
* 掏出金額;
* @param monery
* @return 金額;
*/
public int getMonery(int monery){
//斷定能否賬戶余額能否年夜於 要掏出的錢;
if(this.value > monery ){
this.value = this.value - monery;
}else{
monery = this.value; //賬戶余額不敷時,則掏出,一切的賬戶余額的金額.
this.value = 0;
}
//前往掏出的錢;
return monery;
}
/**
* 查詢余額;
* @return 前往賬戶余額;
*/
public int search(){
return this.value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
java代碼:
import java.io.Serializable;
/**
* 取款線程類;
* @author Administrator
*
*/
public class FetchMoney extends Thread implements Serializable{
private static final long serialVersionUID = -5059599151558445815L;
private Account account; //賬戶對象;
private int monery; //余額;
public FetchMoney(){
super();
}
public FetchMoney(int monery,Account account){
this.account = account;
this.monery = monery;
}
@Override
public void run() {
// TODO Auto-generated method stub
int currMonery = account.search(); //以後余額;
synchronized (account) {
try {
sleep(5); //取款發費的時光;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//掏出余額;
int getMonery = account.getMonery(monery);
System.out.println("尊重的"+account.getName()+"用戶您好!"+"以後的余額為:"+currMonery +"元."+"掏出余額為:"+getMonery+"元."+"賬戶余額為:"+account.search()+"元");
}
}
}
java代碼:
/**
* 存款線程類;
* @author Administrator
*
*/
public class SaveMoney extends Thread implements Serializable{
private static final long serialVersionUID = 3095120546560212724L;
private Account account; //賬戶對象;
private int money; //金額;
public SaveMoney(){
super();
}
public SaveMoney(int money,Account account){
this.account = account;
this.money = money;
}
@Override
public void run() {
// TODO Auto-generated method stub
int currMonery = account.search(); //查詢賬戶余額;
//同步對象,只許可單線程操作;
synchronized (account) {
try {
sleep(5); //查詢的時刻,發費得時光;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
account.putMonery(this.money); //拔出金額;
//輸入存款信息;
System.out.println("尊重的"+account.getName()+"用戶您好!"+"以後的余額為:"+currMonery +"元."+"存入余額為:"+this.money+"元."+"賬戶余額為:"+account.search()+"元");
}
}
}
java代碼:
/**
* ATM測試類;
* @author Administrator
*
*/
public class ThreadATMDemo {
/**
* 主辦法;
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Account account = new Account();
//設置用戶名;
account.setName("ZhouHaiTao");
//初始化余額;
account.setValue(0);
//存入100;
new SaveMoney(100,account).start();
//存入200;
new SaveMoney(200, account).start();
//掏出500;
new FetchMoney(500, account).start();
}
}
法式運轉成果以下:
尊重的ZhouHaiTao用戶您好!以後的余額為:0元.存入余額為:100元.賬戶余額為:100元
尊重的ZhouHaiTao用戶您好!以後的余額為:0元.存入余額為:200元.賬戶余額為:300元
尊重的ZhouHaiTao用戶您好!以後的余額為:0元.掏出余額為:300元.賬戶余額為:0元