❶ 利用java,如何锁定数组中的一个值,例如,购买电影票选座位,如何用java实现
这段代码逻辑不清楚
int[] number=new int[100]; 这个number表示什么?座位号,一共100个座位?
n 代表什么?
最好把你的想法说下,这样好帮助你
❷ 用java实现卖电影票的程序,实现5个窗口同时售卖100张票.(用数组保存)
{
@Override
publicvoidrun()
{
Stringname=Thread.currentThread().getName();
while(name.startsWith("窗口"))
{
if(tickets.length==0)
{
stop();
break;
}
intnum=(int)(Math.random()*tickets.length)+1;
tickets=newint[tickets.length-num];
System.out.println(name+"售出了"+num+"张票");
try
{
Thread.sleep(500);
}
catch(InterruptedExceptione)
{}
}
}
publicsynchronizedvoidstart()
{
for(inti=0;i<ts.length;i++)
{
Threadthread=ts[i];
if(thread==null)
{
thread=newThread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.setName("窗口"+(i+1));
thread.start();
}
}
}
publicsynchronizedvoidstop()
{
for(inti=0;i<ts.length;i++)
{
Threadthread=ts[i];
if(thread!=null)
{
thread.interrupt();
}
thread=null;
}
notifyAll();
}
staticint[]tickets=newint[100];
privatestaticintWIN=5;
Thread[]ts=newThread[WIN];
publicstaticvoidmain(String[]args)
{
newYugi().start();
}
}
❸ java多线程 模拟售票窗口出售电影票,假设有100张电影票,有3个售票站,模拟各个售票站的售票情况
三个线程,用个同步方法取这100张票,售完为止
❹ java返回值
程序一的结构是这样的, class SquareProperties, 这个class里面有两个普通method和一个main method. 你可以把一个method理解了一个工具包,用来实现一个功能的。double computeArea(double side), 这个method的功能就是计算面积。 你输入了一个参数side, 这个method里面把计算出的面积值返回给你。 第二个是求周长的,同理。
你在main method里面调用这几个方法,就能直接实现求周长和面积的功能了。
而程序二, 则把这两个方法的内容直接混到main method里面了。
你现在可能觉得程序二这种方法更方便, 但如果你以后做一些正规的软件时, 如果把各种功能一气都放到main里面, 无法重复利用,且非常乱。 而把各种功能都分别包到一个个的method里面,需要哪个就用哪个, 非常方便。
程序二中的public static。 public是权限, 表示所有的程序,无论从哪来的,都能调用这个变量。
一般来说能不public的尽量不要。 为了安全和保密起见。
static, 静态的。意思就是说, 给这个变量单独分配一块内存空间,谁都可以调用。如果这个变量不加static, 它就不是一个静态变量。 而它在main method的外边,是无法被main里面的东西所调用的。 建议学习一下局部变量和全局变量。
这些东西我刚学JAVA的时候也非常纠结,一整个学期都没明白, 直到下学期学数据结构的时候才顿悟。 如有不懂, 可私HI我留QQ之类。
❺ Java如何模拟多线程
Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:
◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;
◆实现Runnalbe接口,重载Runnalbe接口中的run()方法。
为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢?
在Java中,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类.这样,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。因此,如果自定义类必须扩展其他的类,那么就可以使用实现Runnable接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。
还有一点最重要的就是使用实现Runnable接口的方式创建的线程可以处理同一资源,从而实现资源的共享.
(1)通过扩展Thread类来创建多线程
假设一个影院有三个售票口,分别用于向儿童、成人和老人售票。影院为每个窗口放有100张电影票,分别是儿童票、成人票和老人票。三个窗口需要同时卖票,而现在只有一个售票员,这个售票员就相当于一个CPU,三个窗口就相当于三个线程。通过程序来看一看是如何创建这三个线程的。
public class MutliThreadDemo {
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
MutliThread m2=new MutliThread("Window 2");
MutliThread m3=new MutliThread("Window 3");
m1.start();
m2.start();
m3.start();
}
}
class MutliThread extends Thread{
private int ticket=100;//每个线程都拥有100张票
MutliThread(String name){
super(name);//调用父类带参数的构造方法
}
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
}
}
}
程序中定义一个线程类,它扩展了Thread类。利用扩展的线程类在MutliThreadDemo类的主方法中创建了三个线程对象,并通过start()方法分别将它们启动。
从结果可以看到,每个线程分别对应100张电影票,之间并无任何关系,这就说明每个线程之间是平等的,没有优先级关系,因此都有机会得到CPU的处理。但是结果显示这三个线程并不是依次交替执行,而是在三个线程同时被执行的情况下,有的线程被分配时间片的机会多,票被提前卖完,而有的线程被分配时间片的机会比较少,票迟一些卖完。
可见,利用扩展Thread类创建的多个线程,虽然执行的是相同的代码,但彼此相互独立,且各自拥有自己的资源,互不干扰。
(2)通过实现Runnable接口来创建多线程
public class MutliThreadDemo2 {
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
MutliThread m2=new MutliThread("Window 2");
MutliThread m3=new MutliThread("Window 3");
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
Thread t3=new Thread(m3);
t1.start();
t2.start();
t3.start();
}
}
class MutliThread implements Runnable{
private int ticket=100;//每个线程都拥有100张票
private String name;
MutliThread(String name){
this.name=name;
}
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+name);
}
}
}
由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和(1)结果大同小异。均是各自线程对自己的100张票进行单独的处理,互不影响。
可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。
由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和例4.2.1的结果大同小异。均是各自线程对自己的100张票进行单独的处理,互不影响。
可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。
(3)通过实现Runnable接口来实现线程间的资源共享
现实中也存在这样的情况,比如模拟一个火车站的售票系统,假如当日从A地发往B地的火车票只有100张,且允许所有窗口卖这100张票,那么每一个窗口也相当于一个线程,但是这时和前面的例子不同之处就在于所有线程处理的资源是同一个资源,即100张车票。如果还用前面的方式来创建线程显然是无法实现的,这种情况该怎样处理呢?看下面这个程序,程序代码如下所示:
+ View Code
结果正如前面分析的那样,程序在内存中仅创建了一个资源,而新建的三个线程都是基于访问这同一资源的,并且由于每个线程上所运行的是相同的代码,因此它们执行的功能也是相同的。
可见,如果现实问题中要求必须创建多个线程来执行同一任务,而且这多个线程之间还将共享同一个资源,那么就可以使用实现Runnable接口的方式来创建多线程程序。而这一功能通过扩展Thread类是无法实现的,读者想想看,为什么?
实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。