更新:谢谢大家!根据建议,我修改了程序,并且下面给出的代码是修改后的代码。
原始帖子:我看过一些“申请和分析”类型的问题,在一个问题中,程序员被要求为电影院的三个预订柜台应用多线程概念,并计算在一场演出中的总预订人数和收取的总金额。
我已经为此编写了一个程序,您可以在下方看到:
import java.io.*;
import java.lang.*;
class Cinema
{
int no=0,price=0;
synchronized void reservation(int n,int p)
{
no=no+n;
price=price+p;
}
}
class Counter implements Runnable
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Cinema c;
int not,cost;
Counter(Cinema c)
{
this.c=c;
}
public void run()
{
try
{
System.out.print("\nCounter 1");
System.out.print("\nEnter the no. of tickets :");
not=Integer.parseInt(br.readLine());
cost=not*150;
c.reservation(not,cost);
}
catch(IOException e){System.out.print("\n"+e);}
}
}
class CinemaMain
{
public static void main(String args[])throws IOException
{
Cinema c=new Cinema();
System.out.print("\nCounter 1");
Thread c1=new Thread(new Counter(c));
c1.start();
c1.join();
System.out.print("\nCounter 2");
Thread c2=new Thread(new Counter(c));
c2.start();
c2.join();
System.out.print("\nCounter 3");
Thread c3=new Thread(new Counter(c));
c3.start();
c3.join();
try
{
Thread.sleep(500);
}
catch(InterruptedException ie)
{
System.out.print("\n"+ie);
}
System.out.print("\nTotal no. of tickets :"+c.no);
System.out.print("\nTotal Money collected:"+c.price);
}
}
我可以编译它,但是运行程序时,我得到了这个 -->链接(由于我没有10的声望,我无法在此处发布图像,抱歉!)我不知道为什么,尽管我已经在run方法中编写了输入代码,但它却没有要求输入。
Scanner
来处理控制台输入。 - Sotirios Delimanolisrun()
方法只运行一次,然后线程就完成并关闭了。你的每个计数器类(它们是相同的类,为什么要复制/粘贴三次?)将运行一次并终止。 - Mike 'Pomax' Kamermans