软件培训网

欢迎访问软件培训网!招生咨询电话与微信:15225191462(周老师)
软件培训网,专业解决学IT疑难杂症!

首页 > 软件测试/ 正文

Java线程关闭:代码实战总结

2012-09-14 15:01:09

  总的来说有3种:uT4软件IT培训网-河南郑州IT培训

  1.使用状态位,这个简单,就不多说了:uT4软件IT培训网-河南郑州IT培训

  public class Task extends Thread {uT4软件IT培训网-河南郑州IT培训

  private volatile boolean flag= true;uT4软件IT培训网-河南郑州IT培训

  public void stopTask() {uT4软件IT培训网-河南郑州IT培训

  flag = false;uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  @OverrideuT4软件IT培训网-河南郑州IT培训

  public void run() {uT4软件IT培训网-河南郑州IT培训

  while(flag){uT4软件IT培训网-河南郑州IT培训

  /* do your no-block task */uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用Thread.interrupt();uT4软件IT培训网-河南郑州IT培训

  public class BlockTask extends Thread {uT4软件IT培训网-河南郑州IT培训

  @OverrideuT4软件IT培训网-河南郑州IT培训

  public void run() {uT4软件IT培训网-河南郑州IT培训

  try {uT4软件IT培训网-河南郑州IT培训

  while (!Thread.interrupted()) {uT4软件IT培训网-河南郑州IT培训

  /* do your block task*/uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  } catch (Exception e) {uT4软件IT培训网-河南郑州IT培训

  e.printStackTrace();uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  }uT4软件IT培训网-河南郑州IT培训

  但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:uT4软件IT培训网-河南郑州IT培训

  1 public class BlockTask extends Thread {uT4软件IT培训网-河南郑州IT培训

  2 @OverrideuT4软件IT培训网-河南郑州IT培训

  3 public void run() {uT4软件IT培训网-河南郑州IT培训

  4 try {uT4软件IT培训网-河南郑州IT培训

  5 sleep(10000);uT4软件IT培训网-河南郑州IT培训

  6 } catch (InterruptedException e) {uT4软件IT培训网-河南郑州IT培训

  7 System.out.println("if yout use interrupt you will see me");uT4软件IT培训网-河南郑州IT培训

  8 }uT4软件IT培训网-河南郑州IT培训

  9uT4软件IT培训网-河南郑州IT培训

  10 }uT4软件IT培训网-河南郑州IT培训

  11 public static void main(String[] args)throws Exception {uT4软件IT培训网-河南郑州IT培训

  12 // TODO Auto-generated method stubuT4软件IT培训网-河南郑州IT培训

  13 BlockTask task = new BlockTask();uT4软件IT培训网-河南郑州IT培训

  14 task.start();uT4软件IT培训网-河南郑州IT培训

  15 Thread.sleep(1000);uT4软件IT培训网-河南郑州IT培训

  16 task.interrupt();uT4软件IT培训网-河南郑州IT培训

  17uT4软件IT培训网-河南郑州IT培训

  18 }uT4软件IT培训网-河南郑州IT培训

  19 }uT4软件IT培训网-河南郑州IT培训

  3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法uT4软件IT培训网-河南郑州IT培训

  1 public class SocketTask extends Thread {uT4软件IT培训网-河南郑州IT培训

  2 private volatile ServerSocket server;uT4软件IT培训网-河南郑州IT培训

  3uT4软件IT培训网-河南郑州IT培训

  4 public void stopTask(){uT4软件IT培训网-河南郑州IT培训

  5 try {uT4软件IT培训网-河南郑州IT培训

  6 if(server!=null){uT4软件IT培训网-河南郑州IT培训

  7 server.close();uT4软件IT培训网-河南郑州IT培训

  8 System.out.println("close task successed");uT4软件IT培训网-河南郑州IT培训

  9 }uT4软件IT培训网-河南郑州IT培训

  10 } catch (IOException e) {uT4软件IT培训网-河南郑州IT培训

  11 System.out.println("close task failded");uT4软件IT培训网-河南郑州IT培训

  12 }uT4软件IT培训网-河南郑州IT培训

  13 }uT4软件IT培训网-河南郑州IT培训

  14 @OverrideuT4软件IT培训网-河南郑州IT培训

  15 public void run() {uT4软件IT培训网-河南郑州IT培训

  16 try {uT4软件IT培训网-河南郑州IT培训

  17 server = new ServerSocket(3333);uT4软件IT培训网-河南郑州IT培训

  18 } catch (IOException e) {uT4软件IT培训网-河南郑州IT培训

  19 e.printStackTrace();uT4软件IT培训网-河南郑州IT培训

  20 }uT4软件IT培训网-河南郑州IT培训

  21 }uT4软件IT培训网-河南郑州IT培训

  22uT4软件IT培训网-河南郑州IT培训

  23 public static void main(String[] args) throws InterruptedException {uT4软件IT培训网-河南郑州IT培训

  24uT4软件IT培训网-河南郑州IT培训

  25 SocketTask task = new SocketTask();uT4软件IT培训网-河南郑州IT培训

  26 task.start();uT4软件IT培训网-河南郑州IT培训

  27 Thread.sleep(1000);uT4软件IT培训网-河南郑州IT培训

  28 task.stopTask();uT4软件IT培训网-河南郑州IT培训

  29 }uT4软件IT培训网-河南郑州IT培训

  30uT4软件IT培训网-河南郑州IT培训

  31 }uT4软件IT培训网-河南郑州IT培训


Tags:女生学软件开发好就业吗,河南java培训机构哪家比较好点,郑州学软件开发以后的就业怎么样,C++使用可变参数,郑州北大青鸟java培训课程全新改版升级,郑州北大青鸟软件学院2017年招生简章公

搜索
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
热门标签
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
软件培训学校哪家好,就来软件培训网咨询
  • QQ交谈