主函数中的常量怎么才能让多线程引用?
2012-07-26 00:17
197 查看
今天总结多线程,在自己写的一个多线程程序中,我想要线程处理客户类100次,但是这个 循环次数 应该定义在哪儿呢? 按理说应该定义在主函数中,便于修改,但是我把循环次数SUM定义在了主函数中后,在线程类中引用SUM则找不到常量,如果在SUM前面加了PUBLIC的话,直接提示非法的开头~~郁闷了。最后我只能定义在客户类中,和计数变量count一样的定义和引用,倒是没问题。但是觉得这样很麻烦。下面是我的程序代码,大家看看我该怎么改,才能保证能让循环次数SUM作为一个常量,保存在主函数中便于修改~
大家看看我该怎么改,才能保证能让循环次数SUM作为一个常量,保存在主函数中便于修改~
1.import java.util.concurrent.locks.*; 2. 3.class Demo 4.{ 5.public static void main(String[] args) 6.{ 7. 8.//创建客户对象 9.Food f = new Food(); 10. 11.//创建两个厨师线程,开始线程 12.new Thread(new Chef(f)).start(); 13.new Thread(new Chef(f)).start(); 14. 15.//创建两个吃货线程,开始线程 16.new Thread(new Eater(f)).start(); 17.new Thread(new Eater(f)).start(); 18.} 19.} 20. 21.//创建客户类 22. 23.class Food 24.{ 25. private String name; 26.private int count = 1; //计数器 27.private int SUM = 100; //循环次数 28.private boolean flag = false;//定义标志, 29. 30.private Lock lock = new ReentrantLock(); //创建锁 31. 32.private Condition con_cook = lock.newCondition(); //创建厨师的条件队列 33.private Condition con_eat = lock.newCondition(); //创建吃货的条件队列 34. 35.public int getCount() 36.{ 37.return count; 38.} 39. 40.public int getSum() 41.{ 42.return SUM; 43.} 44. 45.//创建厨师类线程的执行函数内容,将其封装起来 46.public void cook(String name) throws InterruptedException 47.{ 48.lock.lock();//为线程上锁,此时在解锁之前,cpu的执行权只所属一个线程 49.try 50.{ 51.while(flag) 52.con_cook.await();//使当前厨师线程进入等待状态 53. 54.this.name = count++ + name; 55.System.out.println(Thread.currentThread().getName()+"厨子:......第"+this.name+"做好了,快吃吧"); 56.flag = true; 57.con_eat.signal();//唤醒一个吃货线程 58.} 59.finally 60.{ 61.lock.unlock();//为线程解锁,释放资源 62.} 63.} 64. 65.public void eat() throws InterruptedException 66.{ 67.lock.lock();//为线程上锁,此时在解锁之前,cpu的执行权只所属一个线程 68.try 69.{ 70.while(!flag) 71.con_eat.await();//使当前吃货线程进入等待状态 72.System.out.println(Thread.currentThread().getName()+"吃货:......第"+this.name+"吃完了,快做吧"); 73.flag = false; 74.con_cook.signal();//唤醒一个厨师线程 75.} 76.finally 77.{ 78.lock.unlock();//为线程解锁,释放资源 79.} 80.} 81. 82.} 83. 84.//定义厨师类,为实现接口型 85.class Chef implements Runnable 86.{ 87.private Food f; 88. 89.Chef(Food f) 90.{ 91.this.f = f; 92.} 93.public void run() 94.{ 95.while(f.getSum()>f.getCount()) 96.{ 97.try 98.{ 99.f.cook("盘"); 100.} 101.catch (InterruptedException e) 102.{ 103.} 104.} 105.} 106.} 107. 108.//定义吃货类,为继承Thread类 109.class Eater extends Thread 110.{ 111.private Food f; 112. 113.Eater(Food f) 114.{ 115.this.f = f; 116.} 117.public void run() 118.{ 119.while(f.getSum()>f.getCount()) 120.{ 121.try 122.{ 123.while(true) 124.f.eat(); 125.} 126.catch (InterruptedException e) 127.{ 128.} 129.} 130.} 131.}
大家看看我该怎么改,才能保证能让循环次数SUM作为一个常量,保存在主函数中便于修改~
相关文章推荐
- 笔记:使ecshop 模板中可引用 常量
- VS2013怎么配置opencv才能不用每次都重新配置一遍?
- 怎么才能学好Asp.net?
- 多线程的代码究竟怎么写
- 如何查看spider蜘蛛,那么怎么才能知道蜘蛛是否来过你的站?
- ERP实施顾问要怎么才能迅速提升自己。
- 怎么才能自定义iMindMap中图形
- 怎么才能有积分
- 机械行业怎么才能选择合适的ERP软件?机械行业ERP软件6大功能
- 在linux下,怎么才能从图形界面切换到文本命令行界面?
- 怎么应用vertical-align,才能生效?
- codeblocks 多线程编程时:对pthread_create未定义的引用
- Date Time Picker时间控件只能显示日期或时分秒,我怎么才能让它在界面上同时显示出两者,并且保证点击下拉按钮时可编辑日期? 2010-11-24 19:47
- 单位怎么发年终奖才能合理避税,用Python程序实现
- 2012,小团队怎么才能玩得好?
- C# 怎么快速的安装引用包
- 网站应该怎么设计才能在搜索引擎排名更好
- VC++中的常量这么多,怎么记得住啊!!!!
- 怎么才能显示Eclipse中ConSole的全部输出内容
- android 如何引用@hide(隐藏)的类,方法和常量?