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) 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; } }
(B ) 该 程 序 无 法 编 译 通 过 (C) 显 示 当 前 的 秒 数 并 逐 秒 更 新 (D) 显 示 一 个 固 定 不 变 的 秒 数 【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() |