马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
写程序之前要了解两个概念
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();
- }
复制代码- [/code]同样道理:
- [b]以窗口售票为例:[/b]
- 车站有共同的车票->车站有不同的窗口来售票
- 车站是进程 车票是共享资源 不同的窗口是线程
- 而窗口共有的是什么呢 是票对吧 票在哪 在车站
- 代码如下:
- [code]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();
- }
-
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
|