写程序之前要了解两个概念

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();
}
以上为写程序的一点感悟

最新文章

  1. nginx中error_page没有生效(nginx+passenger+rails)
  2. A library of generic data structures
  3. CSS3_loading效果
  4. 带Left Join的SQL语句的执行顺序
  5. photoshop:调整图层之色相/饱和度
  6. Android流量监控 思路,想法
  7. (从终端看linux-2)浅析terminal创建时ptmx和pts关系
  8. 【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现
  9. iOS 图片裁剪方法
  10. poj 2230详解
  11. 3.2 2-dim Vector Initialization
  12. 基于cxf的app文件上传接口(带回显功能)
  13. svn打分支和合并操作
  14. C#实现数字字符串左补齐0的方法
  15. salt安装及使用部分笔记
  16. Eclipse中JSP生成的class文件去了哪里?
  17. sql 替换字段中的部分字符,替换指定字符
  18. c++标准库多线程入门
  19. Qt加载OSg视图例子
  20. OpenACC 计算构建内的自定义函数

热门文章

  1. C# --- SqlserverHelper帮助类、快速实现增删改查
  2. SQL Server数据库 备份A库,然后删除A库,再还原A库,此时数据库一直显示“正在还原”的解决方法
  3. java-Stream的总结
  4. 最强人工智能 OpenAI 极简教程
  5. Static、Final关键字详解
  6. Vue el与data的两种写法 && Object.defineProperty方法
  7. Apache DolphinScheduler之最美好的遇见
  8. day19--Java集合02
  9. GCC常见命令
  10. identity4 系列————启航篇[二]