主函数中的常量怎么才能让多线程引用?

来源:互联网 发布:淘宝摄影室内布光 编辑:程序博客网 时间: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作为一个常量,保存在主函数中便于修改~

原创粉丝点击