`
duoerbasilu
  • 浏览: 1483846 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
今天总结多线程,在自己写的一个多线程程序中,我想要线程处理客户类100次,但是这个 循环次数 应该定义在哪儿呢? 按理说应该定义在主函数中,便于修改,但是我把循环次数SUM定义在了主函数中后,在线程类中引用SUM则找不到常量,如果在SUM前面加了PUBLIC的话,直接提示非法的开头~~郁闷了。最后我只能定义在客户类中,和计数变量count一样的定义和引用,倒是没问题。但是觉得这样很麻烦。下面是我的程序代码,大家看看我该怎么改,才能保证能让循环次数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作为一个常量,保存在主函数中便于修改~

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics