`

利用Thread Stop来停止主线程

    博客分类:
  • JAVA
阅读更多

我的需求很简单,主线程中有个任务很耗时,我需要异步初始化,但是如果异步初始化失败,需要将主线程中断,这里主线程不会等待异步线程的消息,他会有很多个异步线程来做任务同时会有自己的任务,所以他需要一直运行下去,从而需要异步线程主动来打断主线程的运行,想来想去还是使用stop方法靠谱些,虽然偶知道他不安全,其实我这里不需要考虑这些,主线程被中断了,我去重启主线程,主线程占据的资源也会由于kill而被释放掉。

 

	final Thread t = Thread.currentThread();

		new Thread() {
			public void run() {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				t.stop(new Error("XXX init Error"));
			}
			
		}.start();
		
		while(true) {
			Thread.sleep(100);
		}
 

   我需要从线程第一时间就能中断主线程,他虽然异步但是很重要

分享到:
评论

相关推荐

    QTimer在子线程里执行例子

    在多线程编程中,有时我们需要在子线程中使用定时器来执行某些任务,以避免阻塞主线程,提高程序的响应性和效率。`QTimer`在子线程中的使用涉及到Qt的线程模型和事件循环。下面我们将详细探讨如何在子线程中使用`...

    Android多线程PPT学习教案.pptx

    - **主线程与子线程交互**:Android提供了一套基于消息队列和Handler的机制来实现跨线程通信。`Handler`、`Looper`和`Message`三者协同工作,确保在主线程中安全地更新UI。 - **Handler**:在主线程中创建`Handler...

    C++_thread.zip

    6. **线程生命周期**:线程可以是独立的(detach),在这种情况下,主线程不会等待其结束;也可以是joinable,需要调用`join()`或`detach()`方法来处理线程的生命周期。 7. **线程安全**:线程安全指的是在多线程...

    linux子线程串口接收.zip

    为了在主线程中安全地更新UI,我们可以利用QT的信号和槽(Signals & Slots)机制。在子线程中接收到数据后,发射一个自定义信号,如`dataReceived(const QByteArray &data)`,然后在主线程中连接这个信号到一个槽...

    chromium base thread

    例如,如果你需要在主线程和工作线程之间进行数据交换,可以使用锁来保护共享资源,避免数据竞争。 **5. 跨线程通信** Chromium Base 提供了`base::SequencedTaskRunner`和`base::SingleThreadTaskRunner`,它们...

    线程关闭javacv关闭20190508.rar

    在创建线程时,应避免阻塞主线程,保证程序的流畅运行。 关闭线程时,必须特别小心,因为不正确的关闭可能导致数据丢失或者资源泄漏。Java提供了interrupt()方法来请求线程停止,但是这并不保证线程会立即停止,...

    QtThreadTest3-20200711.rar

    本学习资料"QtThreadTest3-20200711.rar"着重讲解了如何使用Qt中的`moveToThread`函数来实现对象到子线程的迁移,以及如何在子线程完成任务后优雅地停止线程并释放资源。 首先,`QtThreadTest3`项目可能是包含一个...

    C++在多线程中使用mciSendString播放音乐demoA

    3. 当需要时,可以使用"STOP"或"PAUSE"命令来暂停或停止播放。 4. 最后,使用"CLOSE"命令关闭MCI设备,释放资源。 示例代码可能如下所示: ```cpp #include void playMusic() { mciSendString("open \"music....

    test_cond.rar

    在应用退出时,主线程可以调用条件变量的wakeAll()方法来唤醒所有等待的线程。这样,工作线程在接收到唤醒信号后,就知道应该停止工作并退出。 以下是一个简单的例子: ```cpp class WorkerThread : public ...

    C++多线程封装成类使用示例

    `t.join()`确保主线程会等待`t`线程执行完毕后再继续执行。 接下来,我们将多线程功能封装到一个类中。首先,定义一个类`ThreadPool`,它将维护一个线程池。线程池可以高效地管理和调度多个线程,以执行异步任务。 ...

    利用SurfaceView实现简单的计时器

    `SurfaceView`在单独的线程中渲染其内容,这使得它能与主线程(UI线程)分离,从而避免阻塞UI更新,提高应用程序性能。本文将详细介绍如何利用`SurfaceView`实现一个简单的计时器。 首先,我们需要了解`SurfaceView...

    Android部分之Service篇.pdf

    在实际开发中,合理利用Service可以提升应用的用户体验,避免主线程阻塞,并实现后台持久运行的任务。同时,注意服务的生命周期管理,防止内存泄漏和资源浪费。在必要时,可以结合IntentService等工具类简化Service...

    C++多线程编程详细的讲解

    5. **线程的取消**:可以通过`std::thread::request_stop()`请求线程停止,并通过`std::stop_token`和`std::stop_callback`来检测和响应线程的停止请求。 #### 多线程编程的挑战与优化 多线程编程虽然能显著提升...

    Android开发笔记之:如何安全中止一个自定义线程Thread的方法

    在主线程或者需要停止线程的地方,你可以调用`myThread.interrupt()`来请求中断线程。这将设置线程的中断标志,并且如果线程在等待、阻塞或者睡眠,那么它将会收到`InterruptedException`。 总之,安全地停止一个...

    Java线程[文].pdf

    - **线程控制** 包括启动、停止、中断线程,以及设置优先级等,如`start()`、`stop()`(不推荐)、`interrupt()`、`setPriority()`等方法。 - **线程同步** 为了防止多个线程对共享资源的并发访问导致数据不一致,...

    Qt QThread 多线程使用 - ike_li - 博客园1

    总结来说,Qt中的QThread提供了一种优雅的方式来实现多线程编程,通过继承QThread或移动对象到新线程,可以有效地将耗时操作与主线程分离,提高应用程序的响应速度。同时,利用Qt的信号和槽机制,可以方便地在不同...

    多线程讲解

    在C#中,可以使用Join方法等待线程结束,但不推荐直接使用Stop或Abort方法来强制停止线程,因为这可能导致数据不一致和资源泄漏。 四、线程同步与互斥 为了保证线程安全,我们需要对共享资源进行同步控制。C#提供了...

    Java通过在主循环中判断Boolean来停止线程的方法示例

    接着主线程睡眠5秒,模拟一些延迟操作,然后调用`t1.shutDown()`来请求线程停止。这样,当`t1.run()`检测到`done`被设置为`true`时,循环结束,线程打印出"StopBoolean finished",然后自然退出。 这种线程停止方法...

    ServiceDownload_notification_multipleThread

    - **线程原理**:Android主线程(UI线程)不能执行耗时操作,否则会导致应用无响应。因此,文件下载必须在其他线程中进行,比如使用`AsyncTask`或自定义`Thread`。 - **AsyncTask**:轻量级线程处理工具,适合短...

    Andriod Service与Thread的区别介绍

    在Service中使用Thread是为了避免阻塞主线程,同时利用Service的稳定性和跨组件交互能力,确保后台任务能够在各种情况下正常执行。了解这些区别有助于开发者选择正确的工具来处理特定的后台需求,从而提高应用程序的...

Global site tag (gtag.js) - Google Analytics