寫程式之前要瞭解兩個概念 1.什麼是進程 2.什麼是線程 搞清楚這兩個概念之後 才能寫好一個合適而不會太抽象的程式 對進程和線程的理解見鏈接: https://blog.csdn.net/new_teacher/article/details/51469241 https://www.cnblogs ...
寫程式之前要瞭解兩個概念
1.什麼是進程
2.什麼是線程
搞清楚這兩個概念之後 才能寫好一個合適而不會太抽象的程式
對進程和線程的理解見鏈接:
https://blog.csdn.net/new_teacher/article/details/51469241
https://www.cnblogs.com/aaronthon/p/9824396.html
那麼理解了概念之後 如何寫程式?
以銀行取錢為例:
兩個人有一個相同的賬戶->這個賬戶存儲在銀行->去銀行取錢
個人理解:
銀行是進程 客戶是線程 取錢這個動作是基於客戶所擁有的賬戶來實現的
在此參考了以下代碼:
https://blog.csdn.net/u010988549/article/details/79158121
實現:
public class Bank {
String ACname;
double money;
public synchronized void withdraw(double getMoney)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setMoney(this.getMoney()-getMoney);
System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,當前餘額為: "+this.getMoney()+" 元");
}
}
public class Person implements Runnable{
Bank bank;
public Person(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
this.bank.withdraw(1000);
}
}
我的心得見註釋:
public static void main(String[] args){
Bank bank1=new Bank("frank",10000);//作為進程 有一塊共用資源
Person person=new Person(bank1);//通過共用資源來建立共用對象 通過共用對象來建立線程
//線程通過對象來使用資源 從而建立run方法
Thread t1=new Thread(person,"father");
Thread t2=new Thread(person,"son");
t1.start();
t2.start();
}
同樣道理:
以視窗售票為例:
車站有共同的車票->車站有不同的視窗來售票
車站是進程 車票是共用資源 不同的視窗是線程
而視窗共有的是什麼呢 是票對吧 票在哪 在車站
代碼如下:
public class Station {
int tickets;
public synchronized void sell(int buyTickets)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(this.getTickets()>0)
{
this.setTickets(this.getTickets()-buyTickets);
System.out.println(Thread.currentThread().getName() + ":賣票,票號為:" + this.getTickets());
}
}
}
public class SaleWindows implements Runnable {
Station station;
int number;
@Override
public void run() {
station.sell(1);
}
}
public static void main(String[] args){
Station station=new Station(10);
SaleWindows window1=new SaleWindows(station,1);//不同視窗
SaleWindows window2=new SaleWindows(station,2);
Thread t1=new Thread(window1,String.valueOf(window1.getNumber()));
Thread t2=new Thread(window2,String.valueOf(window2.getNumber()));
t1.start();
t2.start();
}
以上為寫程式的一點感悟