经研究,我推荐这种写法:
/*自定义线程*/
class MyThread implements Runnable{
public void run() {
// TODO Auto-generated method stub
// 定义自己的变量
while(!Thread.currentThread().isInterrupted()){
try {
doSomeThingNeed();//需要更新的操作
//休眠控制最大帧率为每秒3绘制30次
Thread.sleep(30);
} catch (Exception e) {
// TODO: handle exception
Log.v(tag2, "DrawSurfaceView:绘制失败...");
Thread.currentThread().interrupt();
}
}
}
这种写法比http://blog.csdn.net/yanzi1225627/article/details/8581200
用 一个标志位的方法 停止线程更方便!
分享到:
相关推荐
本文将深入探讨如何在Android环境中安全地中断一个自定义线程Thread。 首先,我们需要了解Java线程的基本中断机制。每个线程都有一个中断状态,可以通过`Thread.interrupt()`方法设置。调用这个方法并不会立即停止...
本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常的特点,开发了一种不使用已过时的方法来变相从外部控制线程的挂起与恢复的技术,原理简单,方便理解。 相关技术参考:...
加锁是实现临界区互斥操作的重要手段,确保同一时间只有一个线程访问特定资源。`lock`语句或`Monitor`类提供这样的功能: ```csharp object lockObject = new object(); ... lock (lockObject) { // 访问共享资源 ...
`语句创建了一个新的线程,并将`threadstart`方法设置为线程的入口点。`t.Start();`则启动了这个线程,使其开始执行`threadstart`方法内的代码。 ### 使用委托进行跨线程调用 由于GUI线程(即主UI线程)不允许从...
线程创建和管理是多线程编程中一个非常重要的概念,在实际开发中,合理地创建和管理线程可以提高程序的效率和性能。在C#中,线程池和Thread类是两种常用的线程创建和管理方式。 一、线程池(ThreadPool) 线程池是...
另一种优雅地中止线程的方法是使用`volatile`修饰符声明一个布尔类型的标志位,作为线程是否继续执行的开关。 **优点**: 1. **非侵入性**:这种方法对现有的业务逻辑没有影响,只需检查该标志位即可决定是否继续...
4. **阻塞状态**:一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列。 5. **死亡状态**:处于死亡状态...
在这个项目实战中,我们将设计和实现一个支持自定义规则的灰度发布组件。灰度发布是一种软件部署策略,允许在全面发布新版本之前,先在一小部分用户或环境中测试新功能,以降低潜在问题对整体服务的影响。在这个组件...
其中`thread`模块提供了一个更底层的操作接口,而`threading`则在此基础上进行了进一步封装,提供更为高级的功能。 #### 二、使用`thread`模块进行多线程处理 ##### 1. 函数式创建线程 可以通过调用`thread`模块...
通常,我们会在主线程(UI线程)中创建一个Handler实例,这样处理的消息就会在这个线程中执行,这对于更新UI是必要的,因为Android只允许主线程操作UI。 `Runnable`是一个接口,它定义了一个单个方法`run()`. 任何...
线程安全指的是一个函数在多线程环境下正确运行的能力,不会因为线程的并发执行而导致错误。非线程安全的代码可能会导致数据损坏、死锁或竞态条件。因此,编写多线程代码时,应尽量避免全局变量,除非使用互斥锁或...
线程间的通信是多线程编程中的另一个关键方面,确保数据同步和避免竞态条件。 1. **全局变量**: 尽管简单,但使用全局变量进行通信存在风险,因为它可能导致数据不一致。在示例中,使用了`InterlockedIncrement`...
5. **TIMED_WAITING(超时等待)**:线程处于有限期等待状态,等待另一个线程执行依赖于指定等待时间的操作,例如调用`Object.wait(long timeout)`、`Thread.join(long timeout)`或`Thread.sleep(long millis)`等...
3. **连接线程**:使用`Thread.Join()`方法等待另一个线程结束。 4. **锁定和线程安全性**:使用`lock`关键字来保护共享资源。 5. **选择同步对象**:根据具体情况选择合适的同步对象,如`Monitor`或`Mutex`。 6. **...
在易语言中,多线程模块是一个关键的组成部分,它允许程序同时执行多个任务,提高程序的效率和响应性。本文将详细讲解易语言多线程模块的使用方法、核心概念以及如何通过源码实现线程的创建、运行、中止和销毁。 ...
在C++中,正确地使用和管理线程是多线程编程中的一个关键话题。线程的创建和释放关系到资源的管理以及程序的稳定性和效率。本文将详细讨论如何在C++中正确使用线程以及如何释放线程资源,并重点阐述joinable状态和...
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,使用Looper....
- **就绪队列**:ThreadX维护了一个就绪队列,其中包含了按优先级排序的所有就绪线程。 - **线程优先级列表**:每个优先级上都有一个列表,存储着具有相同优先级的线程。 - **线程优先级映射**:一个位图,表示当前...
这是一个Delphi使用API来创建多线程应用程序的示例。IsDone变量的引入,是为了避免控制台应用的主线程执行结束时,进程中止导致新创建线程中止。——这甚至可能发生在新线程执行writeln()之前。 在线程函数中,...