java多线程实例程序实现与思想

[复制链接]
发表于 2022-9-20 23:17:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
写程序之前要了解两个概念
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
实现:
  1. public class Bank {
  2.     String ACname;
  3.     double money;
  4.     public synchronized void withdraw(double getMoney)
  5.     {
  6.         try {
  7.             Thread.sleep(1000);
  8.         } catch (InterruptedException e) {
  9.             e.printStackTrace();
  10.         }
  11.         this.setMoney(this.getMoney()-getMoney);
  12.         System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,当前余额为: "+this.getMoney()+" 元");
  13.     }
  14. }
复制代码
  1. public class Person implements Runnable{
  2.     Bank bank;
  3.     public Person(Bank bank) {
  4.         this.bank = bank;
  5.     }
  6.     @Override
  7.     public void run() {
  8.         this.bank.withdraw(1000);
  9.     }
  10. }
复制代码
我的心得见注释:
  1. public static void main(String[] args){
  2.       Bank bank1=new Bank("frank",10000);//作为进程 有一块共享资源
  3.       Person person=new Person(bank1);//通过共享资源来建立共享对象 通过共享对象来建立线程
  4.         //线程通过对象来使用资源 从而建立run方法
  5.       Thread t1=new Thread(person,"father");
  6.       Thread t2=new Thread(person,"son");
  7.       t1.start();
  8.       t2.start();
  9. }
复制代码
  1. [/code]同样道理:
  2. [b]以窗口售票为例:[/b]
  3. 车站有共同的车票->车站有不同的窗口来售票
  4. 车站是进程 车票是共享资源 不同的窗口是线程
  5. 而窗口共有的是什么呢 是票对吧 票在哪 在车站
  6. 代码如下:
  7. [code]public class Station {
  8.     int tickets;
  9.     public synchronized void sell(int buyTickets)
  10.     {
  11.         try {
  12.             Thread.sleep(1000);
  13.         } catch (InterruptedException e) {
  14.             e.printStackTrace();
  15.         }
  16.         if(this.getTickets()>0)
  17.         {
  18.             this.setTickets(this.getTickets()-buyTickets);
  19.             System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + this.getTickets());
  20.         }
  21.     }
  22. }
复制代码
  1. public class SaleWindows implements Runnable {
  2.     Station station;
  3.     int number;
  4.     @Override
  5.     public void run() {
  6.         station.sell(1);
  7.     }
  8. }
复制代码
  1. public static void main(String[] args){
  2.     Station station=new Station(10);
  3.     SaleWindows window1=new SaleWindows(station,1);//不同窗口
  4.     SaleWindows window2=new SaleWindows(station,2);
  5.     Thread t1=new Thread(window1,String.valueOf(window1.getNumber()));
  6.     Thread t2=new Thread(window2,String.valueOf(window2.getNumber()));
  7.     t1.start();
  8.     t2.start();   
  9. }
  10.    
复制代码
  1. 以上为写程序的一点感悟
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-23 10:54 , Processed in 0.231068 second(s), 32 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表