Thread.stop方法可能中断线程,但不安全,此方法都不会用上,快被淘汰了
对线程中的 join, wait, sleep的阻塞进行中断,使用Thread.interrupt()方法退出阻塞, 抛出InterruptedException异常
package com.longshine.nio.test; //中断线程 public class ThreadTest { static class TmpThread extends Thread{ boolean started = true; public void run(){ while(started){ System.out.println("线程进行中"); try { sleep(10 * 10000); } catch (InterruptedException e) { } } System.out.println("线程已中断"); } public void stopThead(){ started = false; this.interrupt(); } } public static void main(String[] args) throws Exception{ TmpThread tt = new TmpThread(); tt.start(); Thread.sleep(1000); tt.stopThead(); } }
中断IO阻塞 interrupt方法不管用 了,可使用关闭IO的方法中止阻塞,如Socket的InputStream的read()方法,调用read()后关闭Socket,抛出IOException
package com.longshine.nio.test; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; public class IOThreadTest { public static void main(String[] args) throws Exception{ new Server().start(); new Thread(){ public void run(){ try { new IOThreadTest().work(); } catch (Exception e) { } } }.start(); Thread.sleep(2000); socket.close(); } private static volatile Socket socket; public void work() throws Exception{ socket = new Socket(); socket.connect(new InetSocketAddress("127.0.0.1",8000)); System.out.println("连接服务器成功"); //读数据10秒后超时 socket.setSoTimeout(10000); System.out.println("读取数据中"); try{ socket.getInputStream().read(); } catch(SocketTimeoutException e){ System.out.println("超时中断"); } catch(IOException e){ System.out.println("线程中断"); } } private static class Server extends Thread{ public void run(){ try { startServer(); } catch (Exception e) { e.printStackTrace(); } } public void startServer() throws Exception{ ServerSocket serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress(8000)); System.out.println("服务启动"); serverSocket.accept(); System.out.println("客户端接入"); } } }
相关推荐
本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地退出。 首先,我们需要了解Java中的线程中断机制。线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行...
以下是关于Java中断线程的一些关键知识点: 1. **线程状态**:在Java中,线程有多种状态,包括新建、可运行、运行、阻塞、等待、超时等待和终止。中断线程主要是针对那些处于运行、阻塞或等待状态的线程。 2. **...
以下是对Java中断线程的详细解释: 1. **线程终止条件**: - 当`run`方法执行完毕。 - `return`语句执行,提前结束`run`方法。 - 出现未捕获的异常,导致`run`方法终止。 2. **`stop`方法的弃用**: Java早期...
9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...
- interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...
1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. InterruptedException:线程被中断时抛出的异常,通常需要捕获并处理。 九、线程死锁 1. 死锁的概念...
Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...
// 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...
在Java中,中断线程主要是通过调用`Thread`对象的`interrupt()`方法来实现的。这个方法并不会立即停止目标线程,而是设置一个中断标志,表明线程已被请求中断。如果线程处于阻塞状态(例如在`sleep()`, `wait()`, ...
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点...
Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,开发者可以...
而检查异常(Checked Exceptions)如果在线程中抛出,需在该线程或其祖先线程中捕获,否则会导致线程中断。 最后,书中还将涵盖Java内存模型(JMM)和volatile关键字。JMM定义了线程如何访问共享变量的规则,保证了...
Thread类提供了interrupt()方法用于中断线程,但需要注意的是,这并不意味着线程会立即停止,而是在线程检查到中断标志后自行决定是否停止。守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护...
Java中控制线程的方法有多种,如start()启动线程,run()执行线程,sleep()让线程休眠,join()等待其他线程完成,yield()让当前线程暂停,让其他线程有机会执行,以及interrupt()和isInterrupted()用于中断和检查线程...
Java提供了一个更安全的中断线程的机制,即`Thread.interrupt()`。当调用`interrupt()`时,目标线程的中断状态会被设置,线程在检查到中断状态后可以决定如何响应。例如,`Thread.sleep()`、`SocketInputStream....
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
4. **线程操作**:`Thread`类提供了启动、暂停、恢复、设置优先级、中断和销毁线程的方法。 5. **线程状态**:Java线程有五种基本状态:新建、可运行、运行、阻塞和死亡。线程的状态转换反映了其生命周期的不同阶段...