http://www.educity.cn 作者:佚名 来源:希赛教育
22. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    答:多线程有三种实现方法,分别为:

    ① 实现Runnable接口,覆盖Run()方法。

    ② 继承Thread,覆盖Run()方法。

    ③ 继承TimerTask,覆盖Run()方法。

    同步的实现是在方法前加synchronized,在调用wait()和notify()。

    23. 请说出你所知道的线程同步的方法。

    答:1.synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。

    2. synchronized块:通过synchronized关键字来声明synchronized 块。

    24. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

    答:不可以。synchronized方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程才能获得该锁,重新进入可执行状态。 
 25. 用Java SOCKET编程,实现简单的Echo功能。

    如: 客户端从键盘输入hi(当用户输出exit 退出程序),服务端响应为hi(服务器要求为多线程)

    解:服务器程序:

    import Java.io.*;
    import Java.net.*;
    public class MyServer extends Thread{
    private Socket cq ;
    public MyServer(Socket cq)
    {
    this.cq = cq;
    }
    public void run()
    {
    try
    {
    BufferedReader in=new BufferedReader(new InputStreamReader(cq.getInputStream()));
    PrintWriter out=new PrintWriter(cq.getOutputStream());
    while(true)
    {
    String str=in.readLine();
    System.out.println(str);
    out.println("message: "+str);
    out.flush();
    if(str.equals("exit"))
    break;
    }
    }
    catch(IOException e)
    {
    System.out.println(e.message());
    }
    }
    public static void main(String[] args) throws IOException{
    ServerSocket server=new ServerSocket(8009);
    while(true)
    {
    Socket s=server.accept();
    new MyServer(s).start();
    }
    }
    }

    客户端程序:

    import Java.net.*;
    import Java.io.*;
    public class MyClient{
    public static void main(String[] args)throws Exception
    {
    Socket server=new Socket("localhost",8009);
    BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
    PrintWriter out=new PrintWriter(server.getOutputStream());
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    while(true)
    {
    String str=br.readLine();
    out.println(str);
    out.flush();
    if(str.equals("exit")){
    break;
    }
    System.out.println(in.readLine());
    }
    server.close();
    }
    }