Java2实用教程(第5版)最新答案-耿祥义 联系客服

发布时间 : 星期一 文章Java2实用教程(第5版)最新答案-耿祥义更新完毕开始阅读0e48a01ff56527d3240c844769eae009591ba25e

如执行读/写操作引起阻塞。

3.死亡状态,不能再调用start()方法。 4.新建和死亡状态。

5.两种方法:用Thread类或其子类。 6.使用 setPrority(int grade)方法。

7.Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱。

8.当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。 9.不合理。 10.“吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用interrupt 方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。 二、选择题

1.A。2.A。3.B。 三、阅读程序

1.属于上机调试题目,解答略。 2.属于上机调试题目,解答略。 3.属于上机调试题目,解答略。 4.属于上机调试题目,解答略。 5.属于上机调试题目,解答略。 6.属于上机调试题目,解答略 7.【代码】:BA。

8.属于上机调试题目,解答略 四、编写程序

1. 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); } } }

2. 参照本章例子6 3.参照本章例子9

习题十三(第13章)

一、问答题

1.一个URL对象通常包含最基本的三部分信息:协议、地址、资源。 2.URL对象调用InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。 3.客户端的套接字和服务器端的套接字通过输入、输出流互相连接后进行通信。 4.使用方法accept(),accept()会返回一个和客户端Socket对象相连接的Socket对象。accept方法会堵塞线程的继续执行,直到接收到客户的呼叫。。 5.域名/IP。 四、编程题 1. (1)客户端

import java.net.*;

import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Client

{ public static void main(String args[]) { new ComputerClient(); } }

class ComputerClient extends Frame implements Runnable,ActionListener { Button connection,send; TextField inputText,showResult; Socket socket=null; DataInputStream in=null; DataOutputStream out=null; Thread thread; ComputerClient() { socket=new Socket(); setLayout(new FlowLayout()); Box box=Box.createVerticalBox(); connection=new Button(\连接服务器\ send=new Button(\发送\ send.setEnabled(false); inputText=new TextField(12); showResult=new TextField(12); box.add(connection);

box.add(new Label(\输入三角形三边的长度,用逗号或空格分隔:\ box.add(inputText); box.add(send);

box.add(new Label(\收到的结果:\ box.add(showResult);

connection.addActionListener(this); send.addActionListener(this); thread=new Thread(this); add(box);

setBounds(10,30,300,400); setVisible(true); validate();

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e) { System.exit(0); } }); }