`

java中断线程

阅读更多

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中断线程的正确姿势完整示例.rar

    本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地退出。 首先,我们需要了解Java中的线程中断机制。线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行...

    Java 实例 - 中断线程源代码+详细指导教程.zip

    以下是关于Java中断线程的一些关键知识点: 1. **线程状态**:在Java中,线程有多种状态,包括新建、可运行、运行、阻塞、等待、超时等待和终止。中断线程主要是针对那些处于运行、阻塞或等待状态的线程。 2. **...

    Java基本功之中断线程的理解[参考].pdf

    以下是对Java中断线程的详细解释: 1. **线程终止条件**: - 当`run`方法执行完毕。 - `return`语句执行,提前结束`run`方法。 - 出现未捕获的异常,导致`run`方法终止。 2. **`stop`方法的弃用**: Java早期...

    java多线程的讲解和实战

    9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...

    java多线程Demo

    - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...

    Java多线程编程核心技术_完整版_java_

    1. Thread.interrupt():用于中断线程,但不一定立即停止,需要在run()方法内部检查中断标志并作出相应处理。 2. InterruptedException:线程被中断时抛出的异常,通常需要捕获并处理。 九、线程死锁 1. 死锁的概念...

    java 多线程并发实例

    Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...

    java通过线程控制程序执行超时(新)

    // 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...

    Java中断线程的方法

    在Java中,中断线程主要是通过调用`Thread`对象的`interrupt()`方法来实现的。这个方法并不会立即停止目标线程,而是设置一个中断标志,表明线程已被请求中断。如果线程处于阻塞状态(例如在`sleep()`, `wait()`, ...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    JAVA多线程编程技术PDF

    在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点...

    Java多线程练习题

    Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,开发者可以...

    Java多线程编程实战指南-核心篇

    而检查异常(Checked Exceptions)如果在线程中抛出,需在该线程或其祖先线程中捕获,否则会导致线程中断。 最后,书中还将涵盖Java内存模型(JMM)和volatile关键字。JMM定义了线程如何访问共享变量的规则,保证了...

    Java多线程详解及示例

    Thread类提供了interrupt()方法用于中断线程,但需要注意的是,这并不意味着线程会立即停止,而是在线程检查到中断标志后自行决定是否停止。守护线程(Daemon Thread)是一种特殊线程,当所有非守护线程结束时,守护...

    Java多线程技术精讲

    Java中控制线程的方法有多种,如start()启动线程,run()执行线程,sleep()让线程休眠,join()等待其他线程完成,yield()让当前线程暂停,让其他线程有机会执行,以及interrupt()和isInterrupted()用于中断和检查线程...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    Java提供了一个更安全的中断线程的机制,即`Thread.interrupt()`。当调用`interrupt()`时,目标线程的中断状态会被设置,线程在检查到中断状态后可以决定如何响应。例如,`Thread.sleep()`、`SocketInputStream....

    Java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    4. **线程操作**:`Thread`类提供了启动、暂停、恢复、设置优先级、中断和销毁线程的方法。 5. **线程状态**:Java线程有五种基本状态:新建、可运行、运行、阻塞和死亡。线程的状态转换反映了其生命周期的不同阶段...

Global site tag (gtag.js) - Google Analytics