一、单选题
1. 正确答案:A
答案解析:主线程属于用户线程,所以选A选项。守护线程是为其他线程的运行提供便利服务,比如垃圾回收线程。Thread线、Runnable线程都属于子线程。
2.正确答案:A
答案解析:略
3.正确答案:B
答案解析:Java中实现多线程编程,用户线程即主线程,不需要把Thread作为父类。所以B选项错误。
4.正确答案:B
答案解析:Java提供了两种方法来创建多线程,一种是通过Thread类进行派生,另一种是实现Runnable接口。所以选择B选项。
5.正确答案:D
答案解析:start()方法用于启动线程,所以选择D选项。
二、多选题
1.正确答案:BD
答案解析:Java提供了两种方法来创建多线程,一种是通过Thread类进行派生,另一种是实现Runnable接口。所以选择BD选项。
2.正确答案:ABCD
答案解析:线程是一个动态执行的过程,它也有一个从产生到死亡的过程。包括5中状态:新建、就绪、运行、死亡、堵塞。所以选择ABCD选项。
三、简答题
1. 死亡状态,不能再调用start()方法。
2. 1)调用了sleep()方法(睡眠,静态方法);
2)调用了suspend()方法(挂起,已过时);
3)为等候一个变量,调用wait()方法(等待);
4)输入输出流(I/0)中发生线程阻塞;
5)调用yield()方法(暂停)。
四、编程题
public class E {
public static void main(String args[]) {
Cinema a=new Cinema();
a.zhang.start();
a.sun.start();
a.zhao.start();
}
}
class TicketSeller //负责卖票的类。
{ int fiveNumber=3,tenNumber=0,twentyNumber=0;
public synchronized void sellTicket(int receiveMoney)
{ if(receiveMoney==5)
{ fiveNumber=fiveNumber+1;
System.out.println(Thread.currentThread().getName()+
"给我5元钱,这是您的1张入场卷");
}
else if(receiveMoney==10)
{ while(fiveNumber<1)
{ try { System.out.println(Thread.currentThread().getName()+"靠边等");
wait();
System.out.println(Thread.currentThread().getName()+"结束等待");
}
catch(InterruptedException e) {}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber+1;
System.out.println(Thread.currentThread().getName()+
"给我10元钱,找您5元,这是您的1张入场卷");
}
else if(receiveMoney==20)
{ while(fiveNumber<1||tenNumber<1)
{ try { System.out.println(Thread.currentThread().getName()+"靠边等");
wait();
System.out.println(Thread.currentThread().getName()+"结束等待");
}
catch(InterruptedException e) {}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.println(Thread.currentThread().getName()+
"给20元钱,找您一张5元和一张10元,这是您的1张入场卷");
}
notifyAll();
}
}
class Cinema implements Runnable
{ Thread zhang,sun,zhao;
TicketSeller seller;
Cinema()
{ zhang=new Thread(this);
sun=new Thread(this);
zhao=new Thread(this);
zhang.setName("张某");
sun.setName("李某");
zhao.setName("赵某");
seller=new TicketSeller();
}
public void run()
{ if(Thread.currentThread()==zhang)
{ seller.sellTicket(20);
}
else if(Thread.currentThread()==sun)
{ seller.sellTicket(10);
}
else if(Thread.currentThread()==zhao)
{ seller.sellTicket(5);
}
}
}