写程序之前要了解两个概念
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(); }
以上为写程序的一点感悟