Java通过关闭Socket终止线程

本文实例为大家分享了Java关闭Socket实现终止线程的具体代码,供大家参考,具体内容如下

package Threads;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * Created by Frank
 */
public class StopClose extends Thread {
  protected Socket io;

  public void run() {
    try {
      io = new Socket("java.sun.com", 80);
      BufferedReader is = new BufferedReader(new InputStreamReader(io.getInputStream()));
      System.out.println("StopClose reading");

      /**
       * 死锁,因为读取响应之前,HTTP责成客户端发送一个请求(像GET/HTTP/1.0)和一个空行
       */
      String line = is.readLine();

      /**
       * 所以我们永远不可能到达这里
       */
      System.out.printf("StopClose FINISHED after reading %s!", line);

    } catch (IOException ex) {
      System.out.println("StopClose terminating:" + ex);
    }
  }

  public void shutDown() throws IOException {
    if (io != null) {
      synchronized (io) {
        io.close();
      }
    }
    System.out.println("StopClose.shutDown() complete");
  }

  public static void main(String[] args) throws InterruptedException, IOException {
    StopClose t = new StopClose();
    t.start();
    sleep(1000*5);
    t.shutDown();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java中终止线程的方法详解

    Java中终止线程的方式主要有三种: 1.使用stop()方法,已被弃用.原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的"残疾"数据,不符合完整性,所以被废弃.So, forget it! 2.使用volatile标志位 看一个简单的例子: 首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行 public class MyRunnable i

  • JAVA中 终止线程的方法介绍

    在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume().通过这些方法,我们可以对线程进行方便的操作,但是这些方法中,只有start()方法得到了保留. 在Sun公司的一篇文章<Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? >中详细讲解了舍弃这些方

  • Java中终止线程的三种方法

    Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的! 1.线程正常执行完毕,正常结束 也就是让run方法执行完毕,该线程就会正常结束. 但有时候线程是永远无法结束的,比如while(true). 2.监视某些条件,结束线程的不间断运行 需要while()循环在某以特定条件下退出,最直接的办法就是设一个boolean标志,并通过设置这个标志来控制循环

  • Java通过关闭Socket终止线程

    本文实例为大家分享了Java关闭Socket实现终止线程的具体代码,供大家参考,具体内容如下 package Threads; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; /** * Created by Frank */ public class StopClose extends Thread { pro

  • Java如何使用interrupt()终止线程

    一.interrupt() 说明 interrupt()的作用是中断本线程. 本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有可能抛出SecurityException异常. 如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), sl

  • Java多线程 两阶段终止模式Two-Phase Termination Patter

    目录 1.两阶段终止模式介绍 2.Terminator代码演示 3.TerminationRequester 4.模拟客户端或者服务端都可能终止服务的例子 5.mac telnet模拟客户端输入 1.两阶段终止模式介绍 有时候,我们希望提前结束线程,但安全可靠地停止线程,并不是一件容易的事情,如果立即停止线程,会使共享的数据结构处于不一致的状态,如目前已经废弃使用的Thread类的stop方法(它会使线程在抛出java.lang.ThreadDeath之后终止线程,即使是在执行synchroni

  • Java 正确终止线程的方法

    Thread类中有一个已经废弃的 stop() 方法,它可以终止线程,但由于它不管三七二十一,直接终止线程,所以被废弃了.比如,当线程被停止后还需要进行一些善后操作(如,关闭外部资源),使用这个方法就无能为力了.可以通过线程中断来实现线程终止. 首先来看一下Java线程中断的一些内容: Java平台为每个线程维护了一个布尔型的中断标记,可以通过下列方法获取该标记的值: interrupt() 中断某个线程             isInterrupted() 返回该线程的中断标记       

  • java 优雅关闭线程池的方案

    我们经常在项目中使用的线程池,但是是否关心过线程池的关闭呢,可能很多时候直接再项目中直接创建线程池让它一直运行当任务执行结束不在需要了也不去关闭,这其实是存在非常大的风险的,大量的线程常驻在后台对系统资源的占用是巨大的 ,甚至引发异常.所以在我们平时使用线程池时需要注意优雅的关闭,这样可以保证资源的管控. 在 Java 中和关闭线程池相关的方法主要有如下: void shutdown() List<Runnable> shutDownNow boolean awaitTermination b

  • java 两阶段终止线程的正确做法

    目录 一.怎么优雅地关闭一个线程? 1.错误做法 2.正确做法 二.要点 一.怎么优雅地关闭一个线程? 在一个线程T1中如何优雅地关闭线程T2(也就是说要给T2一个机会释放持有的资源)? 1.错误做法 使用stop()方法停止线程: stop()方法会真正杀死线程,如果此时该线程持有锁,那么其他线程将永远无法获取锁. 使用System.exit()方法停止线程: 会让整个进程都退出 2.正确做法 思路: 代码实现: public class Test { public static void m

  • 详解Java如何关闭线程以及线程池

    目录 前言 1. 关闭线程 1.1 volatile关键字 1.2 intrrrupt()方法 2.关闭线程池 2.1 shutdownNow()方法 2.2 shutdown()方法 前言 这个问题是一个高频的面试题 而且在印象中是由stop方法执行或者终端中的kill杀死 但是这些方法直接简单粗暴,很不安全,而且也不推广 不使用stop的方法 之所以不安全不推广是因为: stop方法不管线程逻辑是否完整,都会终止当前正在运行的线程 会破坏其原子逻辑(多线程加了锁之解决资源共享,但是stop会

  • Java终止线程实例和stop()方法源码阅读

    了解线程 概念 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 线程特点 拥有状态,表示线程的状态,同一时刻中,JVM中的某个线程只有一种状态; ·NEW 尚未启动的线程(程序运行开始至今一次未启动的线程) ·RUNNABLE 可运行的线程,正在JVM中运行,但它可能在等待其他资源,如CPU. ·BLOCKED 阻塞的线程,等待某个锁允许它继续运行 ·WAITING 无限等待(再次运行依赖于让它进入该状态的线程执行某个特定操作) ·TIMED_WAITING 定时

  • Java实现终止线程池中正在运行的定时任务

    最近项目中遇到了一个新的需求,就是实现一个可以动态添加定时任务的功能.说到这里,有人可能会说简单啊,使用quartz就好了,简单粗暴.然而quartz框架太重了,小项目根本不好操作啊.当然,也有人会说,jdk提供了timer的接口啊,完全够用啊.但是我们项目的需求完全是多线程的模型啊,而timer是单线程的,so,楼主最后还是选择了jdk的线程池. 线程池是什么 Java通过Executors提供四种线程池,分别为: newCachedThreadPool :创建一个可缓存线程池,如果线程池长度

随机推荐