Java 编 程 练 习 题 库 (四)


第 一 题
第 二 题
第 三 题
第 四 题
第 五 题

       【1】 设 已 编 写 好 了 一 个 线 程 类MiniThread, 应 怎 样 在main() 中 开 启 该 线 程 呢 ?

(A)new MiniThread;
(B)MiniThread myThread=new MiniThread();
       myThread.start(); 
(C)MiniThread myThread=new MiniThread();
       myThread.run();
(D)new MiniThread.start();
答 案:(D)

       【2】 一 个 线 程 如 果 调 用 了sleep() 方 法, 用 下 列 哪 个 方 法 可 唤 醒 它 ?

(A)notify()
(B)resume()
(C)run()
(D) 以 上 皆 非 
答 案:(D)

       【3】 下 面 程 序 的 运 行 结 果 是 什 么 ?

public class Haha{
    public static void main(String args[]){
        MyThreadClass myThread=new MyThreadClass();
        myThread.start();
        while (myThread.isAlive()){
           try{
               if (myThread.geti()==1) myThread.stop();
               else Thread.currentThread().sleep(100);
           }catch(InterruptedException e){
           }
        }
    }
}
class MyThreadClass extends Thread{
    private int i=0;
    public void run(){
        for (i=0; i <3; i++){ System.out.println("HA!"); try{ sleep(100); }catch(InterruptedException e){ } } } public int geti(){return(i);} } 
(A)HA! 
(B)HA! 
       HA! 
(C)HA! 
       HA! 
       HA! 
(D) 输 出 情 况 不 定 

答 案: (B)

       【4】 下 面 的Applet 运 行 起 来 后 将 实 现 什 么 样 的 功 能 ?

public class Seconds extends java.applet.Applet implements Runnable{
    Thread secondsThread;
    public void start(){
        if (secondsThread==null){
            secondsThread=new Thread();
            secondsThread.start();
        }
    }
    public void run(){
        while (secondsThread!=null) {
             repaint();
             try{
                 secondsThread.sleep(1000);
             }catch(InterruptedException e){}
        }
    }
    public void paint(Graphic g){
       Date now;
       g.drawString(now.getSeconds(),5,10);
    }
    public void stop(){
        secondsThread.stop();
        secondsThread=null;
    }
}
    (A) 能 编 译 通 过, 但 运 行 时 不 能 显 示 秒 数
    (B ) 该 程 序 无 法 编 译 通 过
    (C) 显 示 当 前 的 秒 数 并 逐 秒 更 新
    (D) 显 示 一 个 固 定 不 变 的 秒 数
答 案: (A)

       【5】 编 写 一 个" 模 拟 银 行" 的 多 线 程Java 程 序, 实 现 如 下 要 求:

       银 行 于 某 时 刻 开 始 营 业, 运 行0.8 秒( 也 可 是 自 设 的 某 适 宜 时 间) 后 关 门。 营 业 期 间 有 一 个 顾 客 随 机 地 来 银 行 存 钱、 取 钱。 要 求 顾 客 每 存( 取) 钱 一 次, 银 行 柜 员 就 报 告 一 次 该 顾 客 到 当 天 当 时 为 止 来 银 行 存 入( 取 出) 的 钱 数, 银 行 关 门 时 还 要 再 专 门 报 告 一 次 该 顾 客 当 天 存 入( 取 出) 的 钱 数。

       要 求 用 两 个 不 同 的 线 程 实 现 顾 客 和 银 行 柜 员 的 活 动。
       可 能 用 到 的 方 法:

       Math.random() ---- 生 成 一 个0.0 到1.0 之 间 的 随 机 数

       System.currentTimeMillis() ---- 返 回 代 表 当 前 时 刻( 以 毫 秒 为 单 位) 的 长 整 数

       提 示: 注 意 两 线 程 间 的 同 步 问 题。

答 案:

	
import java.io.*;
public class BankCounter{
public static void main(String args[]){
   CounterDesk ourDesk=new CounterDesk();
   Thread customer=new cusThread(ourDesk,"Mr. Millionaire");
   Thread accountant=new accThread(ourDesk);
   customer.start();
   accountant.start();
   while(customer.isAlive()||accountant.isAlive());
   System.out.println("Bank Closed!");
   }
}
class CounterDesk{
    private int totalmoney;
    private boolean readytoserve;
    private long closetime;
    public CounterDesk(){
        totalmoney=0;
        readytoserve=true;
        System.out.println("Bank open!");
        closetime=System.currentTimeMillis()+800);
    }
    public boolean bankopen(){
        return(System.currentTimeMillis()

	

返回