`

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

    博客分类:
  • java
 
阅读更多

1.Thread.stop和suspend避免使用,容易造成死锁等不可意见的问题。

2.public class Thread {
public void interrupt();
public boolean isInterrupted();
public static boolean interrupted(); // 仅清除当前线程的中断状态,并返回之前的值。清除中断状态的唯一方法
}
3.调用interrupt并不意味着必然停止目标线程正在进行的工作,而是传递请求中断的消息。
4.处理InterruptedException:传递异常(使用throws声明),或者保持中断状态,上次调用栈的代码再处理。

 Java线程关闭,总的来说有3种:

  1.使用状态位,这个简单,就不多说了:

  public class Task extends Thread {

  private volatile boolean flag= true;

  public void stopTask() {

  flag = false;

  }

  @Override

  public void run() {

  while(flag){

  /* do your no-block task */

  }

  }

  }

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

  public class BlockTask extends Thread {

  @Override

  public void run() {

  try {

  while (!Thread.interrupted()) {

  /* do your block task*/

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

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

  1 public class BlockTask extends Thread {

  2 @Override

  3 public void run() {

  4 try {

  5 sleep(10000);

  6 } catch (InterruptedException e) {

  7 System.out.println("if yout use interrupt you will see me");

  8 }

  9

  10 }

  11 public static void main(String[] args)throws Exception {

  12 // TODO Auto-generated method stub

  13 BlockTask task = new BlockTask();

  14 task.start();

  15 Thread.sleep(1000);

  16 task.interrupt();

  17

  18 }

  19 }

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

  1 public class SocketTask extends Thread {

  2 private volatile ServerSocket server;

  3

  4 public void stopTask(){

  5 try {

  6 if(server!=null){

  7 server.close();

  8 System.out.println("close task successed");

  9 }

  10 } catch (IOException e) {

  11 System.out.println("close task failded");

  12 }

  13 }

  14 @Override

  15 public void run() {

  16 try {

  17 server = new ServerSocket(3333);

  18 } catch (IOException e) {

  19 e.printStackTrace();

  20 }

  21 }

  22

  23 public static void main(String[] args) throws InterruptedException {

  24

  25 SocketTask task = new SocketTask();

  26 task.start();

  27 Thread.sleep(1000);

  28 task.stopTask();

  29 }

  30

分享到:
评论

相关推荐

    Java-Java线程编程教程

    Java线程编程是Java开发中的重要组成部分,尤其在如今并发处理和高性能系统设计中不可或缺。本教程将深入探讨Java多线程的相关概念、原理及实战技巧。 首先,我们需要理解什么是线程。线程是程序执行的基本单元,一...

    《Java7并发编程实战手册》书中实例代码

    《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威著作,它涵盖了大量实用的技巧和最佳实践,旨在帮助开发者在多线程环境下编写高效、安全的代码。这本书的实例代码提供了丰富的示例,使读者能够直观地...

    Java多线程编程实战指南 设计模式篇

    《Java多线程编程实战指南 设计模式篇》是一本深度探讨Java并发编程与设计模式融合的书籍。在Java编程中,多线程是提升系统性能、实现并行计算的关键技术,而设计模式则是解决常见问题的最佳实践。本书旨在帮助...

    Java7编程实战手册代码中文

    通过阅读《Java 7并发编程实战手册》的代码中文版,开发者可以更好地理解如何在实际项目中运用这些技术,提高代码的并发性能和程序的稳定性。同时,了解这些特性对于向Java 8和其他更高版本的迁移也是十分有益的。

    Java代码写的局域网多线程TCP、Socket多人聊天室winsock.zip

    在本项目中,"Java代码写的局域网多线程TCP、Socket多人聊天室winsock.zip" 是一个基于Java实现的局域网多用户聊天应用。这个应用利用了TCP(Transmission Control Protocol)协议和Socket编程,同时采用了多线程...

    Java并发编程实战华章专业开发者书库 (Tim Peierls 等 美Brian Goetz).pdf

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...

    java学习笔记及源代码

    综上所述,这份资料是一个全面的Java学习资源,结合理论知识和实战代码,对于希望掌握Java编程的人极具价值。通过深入学习,不仅可以掌握Java语言本身,还能了解其在实际项目中的应用,为今后的软件开发打下坚实基础...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...

    Java毕业设计源码-基于JavaJava多线程与线程安全实践-基于Http协议的断点续传(IT计算机专业Java源代码资料)

    本项目是针对Java毕业设计的一份源码实现...通过研究这份源码,可以提升对Java多线程编程、网络通信及安全性的实战能力,对IT计算机专业的学习和职业发展有显著帮助。实践中遇到的问题和解决方案都值得深入探讨和学习。

    java7并发编程实战手册 书中源码

    本书“Java 7并发编程实战手册”深入探讨了这个主题,虽然这里提供的源码并非书本自带,而是作者独立编写的,但它们同样能帮助我们理解并实践Java 7中的并发概念。 首先,我们要了解Java中的并发基础。Java 5引入了...

    疯狂Java实战演义源码+pdf免费

    《疯狂Java实战演义》是Java编程领域的一本经典书籍,由杨恩雄老师编写,深受广大Java开发者喜爱。这本书不仅提供了丰富的理论知识,还强调了实战应用,旨在帮助读者深入理解和掌握Java技术。源码和PDF的免费提供,...

    java多线程

    一个Java线程经历了新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)五个状态。线程的启动、同步、中断和停止操作都会影响线程的状态转换。 1. **线程创建与启动**:通过`new...

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程

    `ExecutorService`是Java提供的高级线程池接口,它可以控制线程的数量,重用线程,以及管理线程的生命周期。 - **示例代码**: ```java ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定...

    java开发实战1200例

    《Java开发实战1200例》是一本深入实践的编程书籍,专注于通过大量实例来提升读者的Java编程技能。书中的例子涵盖了基础语法、面向对象编程、异常处理、集合框架、多线程、网络编程、数据库操作、GUI设计等多个核心...

    67.多线程代码.zip

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高系统效率...在IdeaProjects这样的学习资源中,通常会包含相关的代码示例、实战项目和讲解文档,帮助开发者深入理解和掌握Java多线程技术。

    java基础实战bank项目需求

    在本Java基础实战银行项目中,我们主要关注的是利用Java编程语言来实现一套完整的银行系统。这个项目旨在帮助初学者巩固Java基础知识,并将其应用于实际的软件开发过程中。项目需求是项目开发的起点,它定义了系统应...

    java聊天软件(源代码)

    Java聊天软件是一款基于Java编程语言实现的实时通讯应用,它允许用户通过网络进行文本、...通过研究这个Java聊天软件的源代码,开发者可以深入了解上述技术的实战应用,进一步提升自己的Java编程技能和网络编程能力。

    java五子棋源代码.doc

    根据提供的文档信息,我们可以深入分析并提取出与Java五子棋源代码相关的多个知识点: ### 1. Java网络编程基础 在Java五子棋项目中,客户端与服务器之间的通信是通过网络实现的。这里涉及到了Java网络编程的基础...

    Java并发编程实战1

    在Java中,线程安全的声明可以通过注解来表达,如`@ThreadSafe`和`@NotThreadSafe`,这有助于代码的文档化和审查。`@GuardedBy`注解可以明确指定哪些字段或方法需要同步保护。这些注解配合Java提供的同步机制,如`...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...

Global site tag (gtag.js) - Google Analytics