在很多情况下,存在多线程中执行一个任务,有的使用场景必须要求只能有一个任务执行,怎么保证呢?以下是一个简单的实现:利用java.util.concurrent.atomic包中的原子变量(atomic variable)类。
利用AtomicBoolean这样已有的线程安全对象管理类的状态是非常适用的,判断一个线程安全对象的可能状态和状态的转化相对容易,简化了维护和验证线程安全性的工作。
public abstract class SingleRunningTask<Param> {
private final AtomicBoolean mIsRunning = new AtomicBoolean(false);
private final String mLogTaskName;
public SingleRunningTask(String logTaskName) {
mLogTaskName = logTaskName;
}
public final void run(Param param) {
if (mIsRunning.compareAndSet(false, true)) {
Log.i(Logging.LOG_TAG, mLogTaskName + ": start");
try {
runInternal(param);
} finally {
Log.i(Logging.LOG_TAG, mLogTaskName + ": done");
mIsRunning.set(false);
}
} else {
// Already running -- do nothing.
Log.i(Logging.LOG_TAG, mLogTaskName + ": already running");
}
}
protected abstract void runInternal(Param param);
}
分享到:
相关推荐
12.如何实现多线程多任务?(Visual C++编程 源代码)12.如何实现多线程多任务?(Visual C++编程 源代码)12.如何实现多线程多任务?(Visual C++编程 源代码)12.如何实现多线程多任务?(Visual C++编程 源代码)...
易语言源码多线程多任务下载软件.rar
很容易上手的一个.Net多线程的定时任务功能,Demo很容易上手,完成了以天、周、月等的计划任务
Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)...
1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled
多线程多任务下载软件.zip易语言项目例子源码下载多线程多任务下载软件.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考
Windows多线程多任务设计初步,适合初学者,高手绕道6
C#多线程多任务管理模型
简单winform 多线程 多任务管理 demo 可根据业务进一步扩展开发,如:下载器等
多线程多任务多线程多任务,简单易用,用MFC写的多线程的小程序。
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程...
posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码
c#.net多线程编程教学,多任务和多线程原理以及程序设计
提供多线程定时任务
完整版多线程多任务下载软件.e.rar
多线程执行任务具体实现方式;
多线程应用程序设计
多线程多任务下载实例代码 传个资源这个费事 写那么多说明
易语言多线程执行任务例程。