/* while(true) {
         try {
         if(in.ready()) {
         str =in.readLine();
         System.out.println(str);
         }
         } catch (IOException e1) {
         // TODO 自动生成 catch 块
         System.out.println("读取信息失败!");
         e1.printStackTrace();
         System.exit(1);
         }
         }*/
这是socket客户端一端程序,in是BufferedReader类型的,想问怎么在客户端判断服务器端发送消息过来了。而不用上面那种方法,上面的方法CPU的利用率一直是100%。

解决方案 »

  1.   

    此函数是在死循环while(true)中执行,当然是占用率100%。使得此函数所在的类继承Thread
    即是  ××× extends Thread
      

  2.   

    /*
     * 创建日期 2005-7-28
     *
     * TODO 要更改此生成的文件的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
    package com.motel168.dingnc;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;/**
     * @author qiya
     *
     * TODO 要更改此生成的类型注释的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
    public class SqlThread extends Thread {    BufferedReader in = null;    Socket st = null;    String str = null;    public SqlThread(Socket st) {
            this.st = st;
            try {
                in = new BufferedReader(new InputStreamReader(st.getInputStream()));
            } catch (IOException e) {
                // TODO 自动生成 catch 块
                System.out.println("创建输入流失败!");
                e.printStackTrace();
                System.exit(1);
            }
        }    public void run() {
             while(true) {
             try {
             if(in.ready()) {
             str =in.readLine();
             System.out.println(str);
             }
             } catch (IOException e1) {
             // TODO 自动生成 catch 块
             System.out.println("读取信息失败!");
             e1.printStackTrace();
             System.exit(1);
             }
             }
            }    }
    }
    全部的代码如上。我也知道是死循环,但是我没有更好的方法来判断服务器发送过来消息了,想知道怎么判断。
      

  3.   

    判断的方法没错,另外readline是阻塞操作,绝对不是你cpu100%的原因,多线程程序的话你该检查其他地方了。