启动一条线程
  下面的三个例子使用了不同的方式完成了同样的事情。
  实现Runnnable的方式:
  void startAThread0(){
  new Thread(new MyRunnable()).start();
  }
  class MyRunnable implements Runnable{
  public void run(){
  ...
  }
  }
  继承Thread的方式:
  void startAThread1(){
  new MyThread().start();
  }
  class MyThread extends Thread{
  public void run(){
  ...
  }
  }
  匿名继承Thread的方式:
  void startAThread2(){
  new Thread(){
  public void run(){
  ...
  }
  }.start();
  }
  不要直接调用run()方法。总是调用Thread.start()方法,这个方法会创建一条新的线程并使新建的线程调用run()。
  参考:java.lang.Thread,java.lang.Runnable。
  使用try-finally
  I/O流例子:
  void writeStuff()throws IOException{
  OutputStream out=new FileOutputStream(...);
  try{
  out.write(...);
  }finally{
  out.close();
  }
  }
  锁例子:
  void doWithLock(Lock lock){
  lock.acquire();
  try{
  ...
  }finally{
  lock.release();
  }
  }
  如果try之前的语句运行失败并且抛出异常,那么finally语句块不会执行。但无论怎样,在这个例子里不用担心资源的释放。
  如果try语句块里面的语句抛出异常,那么程序的运行会跳到finally语句块里执行尽可能多的语句,然后跳出这个方法(除非这个方法还有另一个外围的finally语句块)。
  从输入流里读取字节数据
  InputStream in=(...);
  try{
  while(true){
  int b=in.read();
  if(b==-1)
  break;
  (...process b...)
  }
  }finally{
  in.close();
  }
  read()方法要么返回下一次从流里读取的字节数(0到255,包括0和255),要么在达到流的末端时返回-1。
  参考:java.io.InputStream.read()。
  从输入流里读取块数据
  InputStream in=(...);
  try{
  byte[]buf=new byte[100];
  while(true){
  int n=in.read(buf);
  if(n==-1)
  break;
  (...process buf with offset=0 and length=n...)
  }
  }finally{
  in.close();
  }
  要记住的是,read()方法不一定会填满整个buf,所以你必须在处理逻辑中考虑返回的长度。
  参考:java.io.InputStream.read(byte[])、java.io.InputStream.read(byte[],int,int)。
  从文件里读取文本
  BufferedReader in=new BufferedReader(
  new InputStreamReader(new FileInputStream(...),"UTF-8"));
  try{
  while(true){
  String line=in.readLine();
  if(line==null)
  break;
  (...process line...)
  }
  }finally{
  in.close();
  }
  BufferedReader对象的创建显得很冗长。这是因为Java把字节和字符当成两个不同的概念来看待(这与C语言不同)。
  你可以使用任何类型的InputStream来代替FileInputStream,比如socket。
  当达到流的末端时,BufferedReader.readLine()会返回null。
  要一次读取一个字符,使用Reader.read()方法。
  你可以使用其他的字符编码而不使用UTF-8,但好不要这样做。
  参考:java.io.BufferedReader、java.io.InputStreamReader。