主函数中的常量怎么才能让多线程引用?
来源:互联网 发布:淘宝摄影室内布光 编辑:程序博客网 时间:2024/03/29 04:57
今天总结多线程,在自己写的一个多线程程序中,我想要线程处理客户类100次,但是这个 循环次数 应该定义在哪儿呢? 按理说应该定义在主函数中,便于修改,但是我把循环次数SUM定义在了主函数中后,在线程类中引用SUM则找不到常量,如果在SUM前面加了PUBLIC的话,直接提示非法的开头~~郁闷了。最后我只能定义在客户类中,和计数变量count一样的定义和引用,倒是没问题。但是觉得这样很麻烦。下面是我的程序代码,大家看看我该怎么改,才能保证能让循环次数SUM作为一个常量,保存在主函数中便于修改~
1.import java.util.concurrent.locks.*;2.3.class Demo4.{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 Food24.{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 InterruptedException47.{48.lock.lock();//为线程上锁,此时在解锁之前,cpu的执行权只所属一个线程49.try50.{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.finally60.{61.lock.unlock();//为线程解锁,释放资源62.}63.}64.65.public void eat() throws InterruptedException66.{67.lock.lock();//为线程上锁,此时在解锁之前,cpu的执行权只所属一个线程68.try69.{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.finally77.{78.lock.unlock();//为线程解锁,释放资源79.}80.}81.82.}83.84.//定义厨师类,为实现接口型85.class Chef implements Runnable86.{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.try98.{99.f.cook("盘");100.}101.catch (InterruptedException e)102.{103.}104.}105.}106.}107.108.//定义吃货类,为继承Thread类109.class Eater extends Thread110.{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.try122.{123.while(true)124.f.eat();125.}126.catch (InterruptedException e)127.{128.}129.}130.}131.}
大家看看我该怎么改,才能保证能让循环次数SUM作为一个常量,保存在主函数中便于修改~
- 主函数中的常量怎么才能让多线程引用?
- 关于C++中的常量引用和常量成员函数
- 函数体中的指针或引用常量不能被返回
- 常量函数、常量引用参数、常量引用返回值[C++]
- 常量函数、常量引用参数、常量引用返回值[C++]
- 常量函数、常量引用参数、常量引用返回值
- 怎么才能让博客访问流量大
- 怎么才能让自己更优秀!
- 怎么才能让VS2008恢复默认设置
- const 常量 解释 引用 函数
- 静态成员函数怎么引用该类中的非静态成员
- C++中的常量函数
- 硬盘中的数据丢失怎么才能恢复
- EDIUS中的视频怎么才能添加字幕?
- asp.net2.0怎么才能让网页不自动刷新?
- 怎么才能让搜索引擎搜到自己的网页
- 怎么才能让百度新闻源收录你的网站?
- linux下 c中怎么让才能安全关闭线程
- 初识autoconf和automake
- Linux 内核DMA机制
- 求二叉树中节点的最大距离
- 海底捞,我们该学什么?--《海底捞你学不会》读后感
- asp.net运行报错
- 主函数中的常量怎么才能让多线程引用?
- JNI介绍
- 动态加载2
- 遇到关于strtok的一个问题,郁闷了好一会儿终于找到答案
- list-style-type:符号名称
- 数据完整性(Data Integrity)
- 浅析木马服务端的生成技术
- 页面制作流程
- poj (3155)最大密度子图(搞懂了思路,悲剧)