0 0

这种关闭线程的方法是否安全或者有什么不足0

这种关闭线程的方法是否安全或者有什么不足?
代码如下:
package test;

public class Test extends Thread{
	
	private boolean b = true;
	
	/**
	 * 启动线程的方法
	 */
	synchronized public void run(){
		System.out.println("线程启动");
		while(b){
			//做一些事
		}
	}
	
	/**
	 * 关闭线程的方法
	 */
	public void close(){
		b = false;
		System.out.println("关闭线程");
	}
}
2013年8月03日 17:32

4个答案 按时间排序 按投票排序

0 0

采纳的答案

这种做法应该没什么问题,我在开源软件源码里也看到过。不过就是要注意一点,在b被设置为false的时候,run方法可能刚好进入while,这样在你close之后,还会多做一次//做一些事

2013年8月04日 11:46
0 0

这种方式我试了一下没法先什么问题,vm  server模式下试了也没有什么问题。但是看一下Thread里面的interupt方法都是调用的本地方法,如果这样可以的话sun也不可能费劲去调用本地方法,所以还是不建议这么去实现。

2013年8月04日 10:19
0 0

在server模式下确实是死循环,在client模式下,可能还能关掉。把变量加上volatile就不存在问题了!

2013年8月03日 21:36
0 0

如果没估计错误的话,这样线程永远停止不了。
  线程的同步,在run方法里面是拷贝了一份b变量,你在程序的其他的部位设置b并未通知run方法去更新b变量的新值。
要正确运行的话 应该close方法也加上同步关键字。
  而且Thread类停止并不需要你这么实现
  Thread里面自带的线程终止标志 isinterrupted, public  void run(){
while(!isinterrupted){}}

2013年8月03日 19:43

相关推荐

    VC 打开关闭一个线程

    这些工具可以确保线程安全地共享数据,避免竞态条件和死锁。 7. **事件对象**:事件可以是手动重置或自动重置,用于通知一个或多个线程有特定事件发生。线程可以通过`SetEvent`通知其他线程,使用`...

    怎样干净的关闭指定线程

    ### 如何干净地关闭指定线程 在计算机编程中,多线程技术是实现程序并发执行的重要手段之一。然而,在实际应用中,...这种方法尤其适用于那些需要对线程执行精细控制的应用场景,例如系统服务或高性能服务器软件等。

    封杀MessageBox线程关闭对话框

    这种方法需要对Windows操作系统有深入理解,且可能涉及安全问题。 自动关闭`MessageBox`通常通过以下方式实现: 1. **定时器**:在创建`MessageBox`时启动一个定时器,当定时器时间到,通过API函数如`EndDialog`或`...

    PyQt5多线程的执行和停止

    请注意,使用多线程时需要注意线程安全问题,特别是当多个线程共享数据时,需要确保同步机制,防止竞态条件的发生。在PyQt5中,通常使用`QMutex`或`QSemaphore`等同步对象来解决这些问题。 总的来说,PyQt5的多线程...

    hiredis的c++封装, 线程安全

    这些方法内部应使用线程安全的方式操作Redis。 在实际开发中,还需要考虑错误处理、超时机制、连接重试等复杂情况。通过这种方式,我们不仅可以利用hiredis的高效性,还能确保在多线程环境下的稳定性和安全性。这...

    易语言类方法的获取以及类线程

    而关闭类线程则意味着停止这个线程的执行,可能需要确保线程安全地完成其任务并在适当的时候释放资源。 "线程_测试"是一个示例或测试代码,用于验证类线程的正确性。在编写类线程时,开发者通常会创建一个测试用例...

    MFC创建用户界面线程方法2

    描述中提到“演示了3个用户界面线程的相互通信和工作”,这意味着你需要利用这些机制确保线程安全地交互。 5. **线程退出与清理**:线程函数执行完毕后,应调用`ExitThread`函数来结束线程。同时,确保正确关闭任何...

    12.1 Qt5多线程:多线程及简单实例

    - GUI操作应始终在主线程中进行,因为Qt的GUI组件不是线程安全的。 - 使用`QThread::quit()`或`QThread::wait()`来优雅地终止线程,避免资源泄漏。 - 避免在线程之间共享复杂的Qt对象,除非使用`QThread::moveTo...

    c++ builder 多线程

    1. **线程安全的数据结构**: 使用`TList`、`TStringList`等线程安全的容器类,或者使用`CriticalSection`或`Mutex`保护共享数据。 2. **线程局部存储**: 对于每个线程都需要有自己的变量副本,可以使用`...

    【源码】[疑难]在单线程中模拟多线程的工作模式

    这种方法有助于避免线程安全问题,同时也能确保COM组件的行为符合预期。 具体实现步骤可能包括以下几点: 1. 创建新的线程,并设置其线程公寓状态为STA。 2. 在线程的入口点函数(如`ThreadStart`委托)中,创建并...

    vs2003-hiredis-vc++客户端连接池,线程安全

    本项目"vs2003-hiredis-vc++客户端连接池,线程安全"正是针对这种情况设计的,旨在提供一个线程安全的Redis客户端连接池解决方案。 首先,我们需要了解`hiredis`。`hiredis`是由Antirez编写的轻量级、高性能的C语言...

    java中 如何终止一个线程

    在Java早期版本中,提供了`Thread.stop()`方法来直接终止线程,但这种方法存在严重的安全问题。例如,它可能会导致对象处于不稳定的状态,或者在对象的某些关键操作(如资源释放)完成之前就强行终止线程,从而引发...

    CSerialPort类,彻底关闭串口

    总结起来,`CSerialPort` 类的线程安全关闭功能是串口编程中一个重要的优化,它解决了多线程环境下可能遇到的问题,保证了串口资源的有效管理。通过理解和应用这些技术,开发者可以编写出更稳定、更高效的串口通信...

    编写线程安全的JSP程序

    这种特性允许JSP能够高效地处理并发请求,但也引入了线程安全问题。 1. **线程安全问题**: - **实例变量**:在JSP中,实例变量是共享的,因此在多线程环境中,不同线程可能会同时访问并修改这些变量,导致数据不...

    java多线程处理数据库数据

    1. **线程安全**:由于多线程环境下可能存在数据竞争,所以在访问共享资源(如数据库连接)时,需要确保线程安全。可以使用`synchronized`关键字或者`Lock`来同步访问。 2. **事务管理**:在多线程环境中,可能需要...

    多线程扫描工具

    “端口扫描工具”是网络安全和系统管理员常用的诊断工具,它的工作原理主要是向目标主机发送特定的网络数据包,并根据收到的响应来判断端口是否开放、关闭或过滤。这些工具可以快速发现网络中的异常活动,比如未授权...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    总结来说,MyBatis结合多线程和CountDownLatch闭锁实现数据批量插入是一种高效且安全的方法。它不仅能显著提升数据处理速度,还能有效防止并发问题,是处理大数据量场景下的明智选择。在实际开发中,可以根据具体...

    dll远线程注入c#的实现方法

    在Windows操作系统中,每个进程都有多个线程,每个线程执行独立的代码路径。远线程注入就是将代码注入到目标进程的一个非当前执行线程中。 实现DLL远线程注入通常涉及以下步骤: 1. **创建DLL**:编写包含要注入的...

    线程钩子注入例子

    同时,如果不再需要与目标进程交互,我们也应该关闭进程和线程句柄。 需要注意的是,线程钩子注入技术虽然强大,但也可能被滥用,比如进行恶意软件活动。因此,正确和负责任地使用这种技术是非常重要的。此外,由于...

    一个多线程同步读写的小程序

    在分析这个“read_write”程序时,我们还需要考虑线程安全的数据结构、异常处理以及线程间的通信。例如,线程可能需要处理中断请求,或者在发生错误时能够优雅地关闭。此外,为了调试和性能优化,可能还需要记录日志...

Global site tag (gtag.js) - Google Analytics