多线程
文章平均质量分 74
fyfcauc
这个作者很懒,什么都没留下…
展开
-
Java Thread.interrupt 害人! 中断JAVA线程(zz)
From: http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的、难以发现的错误。 在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程。转载 2014-09-16 11:51:37 · 365 阅读 · 0 评论 -
ThreadUtils
ThreadUtils:提供了对Android的handler一系列封装简化操作,项目必备。该类内部会维护一个UIhandler, 出于lazyInit的目的,该handler作为某个 内部static类的private static成员并在该class被load的时候才会真正的初始化为UIhandler。外部的ThreadUtils类可以直接 通过该static类原创 2015-03-27 14:55:13 · 1220 阅读 · 0 评论 -
java Timer学习笔记
From: http://blog.csdn.net/eg366/article/details/11836017Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务。这种方式可以让程序按照某一个频度执行,但不能指定时间运行。用的较少。任务的调用通过起的子线程进行执行。java.util.Timerjava.util转载 2015-01-22 21:39:56 · 362 阅读 · 0 评论 -
Download模块 (十四)
Download模块 (十四)DownloadThread extends thread, 承载了真正通过http下载数据的任务。Thread的一个问题是,其他thread对thread其实没有完全的控制权,interrupt方法只是改变一个flag,只有在Thread 的run的interrupt定义检测点才能实现对Thread的控制,这也注定了,基本不可能同步的控制一个th原创 2015-03-03 13:42:07 · 541 阅读 · 0 评论 -
使用 android EventBus的一个误区
EvenBus是一个广为使用的android开源库,用来原创 2014-10-20 21:53:53 · 1038 阅读 · 1 评论 -
Android Adapter 源码笔记(2)
ArrayAdapter,很直白的懒人适用型Adapter, 不过要求对应的Data可以以数组的形式表示. 也算是个半教学演示,在构造的时候就会要求一个layout的resoource id,该layout表示的就是ListView中每个View的布局,并且考虑到常规的应用场景都会每个View显示出Data的内容,还可以选择性的给一个layout中的TextView的resId,这样ArrayAda原创 2015-05-11 11:49:36 · 472 阅读 · 0 评论 -
Android Fragment 体系源码跟踪笔记(2)
FragmentTransaction的commit()/commitAllowingStateLoss()调用的都是commitInternal(boolean allowStateLoss),区别就是allowStateLoss,一开始会先检查一下mCommited,如果已经commit则抛异常,否则mCommited = true, 如果mAddToBackStack,那么会请求Fragmen原创 2015-05-07 17:36:18 · 516 阅读 · 0 评论 -
Android Loader机制 源码笔记(2)
Loader: 1. 本身是一个base类, 其注释里谈到了一些注意事项Loader的使用者应该遵循在任何时候对Loader的操作都在主线程(Activity的callback(onStart/XXX)发生的线程)进行, 而Loader的具体实现类,其耗时的操作可以也应该放在独立线程,传达结果这类操作应该在主线程完成Loader的构造函数传入一个context,但是其内部使用的mContext原创 2015-06-17 14:54:39 · 1176 阅读 · 0 评论 -
Android Binder机制源码笔记(2)
一个Client要获得想要通信的Service的handle,必须先借助于ServiceManager来获得想要的service的handle, 所以第一步是和ServiceManager这个service通信,而serviceManader其handle固定为0,因此在IServiceManager.cpp的defaultServiceManager()就可以获得: 可以看到defaultSer原创 2015-06-16 13:19:26 · 513 阅读 · 0 评论 -
Volley 源码笔记(2)
DiskBasedCache implements Cache:顾名思义,这个Cache系统是基于磁盘的,cache文件都保存在磁盘上.DiskBasedCache接受一个File对象(cache文件存放的磁盘目录)和一个int(最大的cache字节数)作为自己的构造参数.initialize()会对cache目录进行初始化,如果cache目录不存在,那么就会创建一个, 然后开始扫描cache目原创 2015-06-18 15:48:49 · 384 阅读 · 0 评论 -
Android handler src track
HandlerThread 是 真正干活的,本身就是一个Thread:HandlerThread extends Thread主要比普通的Thread多了一个Looper,而hanlderThread的run函数其实很简单: @Override public void run() { mTid = Process.myTid(); Loop原创 2014-12-29 15:50:36 · 505 阅读 · 0 评论 -
EventBus 源码笔记(1)
EventBus ThreadMode:PostThread: Subscriber的calback和post在一个线程,默认设置. 这样可以减少线程切换的开销,也是对于比较简单的需求的推荐设置. EventHandler中的Callback不建议执行blocking很长时间的操作,因为有可能callback会在主线程上执行.MainThread: 所有Subscriber的callback都会运原创 2015-08-27 18:45:23 · 552 阅读 · 0 评论 -
Android HandlerThread 源码笔记
HandlerThread extends Thread:本质依然是一个Thread,只不过进行了队列化的包装,使得Handler能与其配合工作.初始化时必须指定Thread的name, 但是Priority可以使用默认的Process.THREAD_PRIORITY_DEFAULT.其run()函数的逻辑很简单:首先获取Tid就是Thread的Id.然后调用Looper.prepare().原创 2015-10-19 11:37:52 · 367 阅读 · 0 评论 -
Android Looper 源码笔记
final class Looper:类注释概括的很好:这个类是用于在一个Thread内运行message loop, 一个Thread默认是没有一个message loop的, 为了创建一个,可以在thread的运行中调用prepare()来将loop创建出来(TLS), 然后调用loop()来开始对消息的处理直到loop停止大多数和message loop交互是通过handler进行的.st原创 2015-10-19 13:28:29 · 395 阅读 · 0 评论 -
Android Handler 源码笔记
Handler:interface Callback -> handleMessage(Message msg)handleMessage(Message msg): 交由子类定制自己的Message处理逻辑.dispatchMessage(Message msg):如果msg自己的callback不是null, 那么会调用handleCallback(msg), message.callbac原创 2015-10-19 11:19:24 · 648 阅读 · 0 评论 -
Android MessageQueue 源码笔记
MessageQueue:一个用于存储Looper要dispatch的Message的底层容器, 不过其功能要远远超过这个注释的描述.Message mMessages:以链表的形式来保存Messge,这里的mMessages是当前队列的第一个要dispatch的Message,后面的通过Message本身的next来进行连接interface IdleHandler:其概念是一种连带处理,在当原创 2015-10-19 15:22:27 · 498 阅读 · 0 评论 -
Android InputEvent(Motion/Key/Sleep....) 流程跟踪
ViewRootImpl的setView()函数中(这个函数被调用代表着Activity的界面基本建立)会建立一群InputStage并以职责链模式链接起来进行协同工作:syntheticInputStageviewPostImeStagenativePostImeStageearlyPostImeStageimeStageviewPreImeStagenativePreImeStage原创 2015-11-20 16:18:36 · 3309 阅读 · 0 评论 -
Android Choreographer 源码笔记
之前有写过一篇粗略分析的文章: http://blog.csdn.net/fyfcauc/article/details/43307253 不过还是不够,这次再专门细读一下:Choreographer主要被外部使用的函数是postCallback(…), 就是在Choreographer中schedule一个Task,这个Task何时运行,则是是由Choreographer来自行安排,满足作S原创 2015-06-19 16:57:16 · 1379 阅读 · 0 评论 -
Download模块 (十三)
Download模块 (十三)DownloadTask类封装了一次下载任务的全部信息 以及 真正下载的实现DownloadTask接收DownloadInfo作为构造参数,并且内部维护一个指向其的引用,作为一个组成部件。DownloadTask有状态,使用enum类实现:NOT_START,IN_PROGRESS,PAUSED,FAILED,COMP原创 2015-03-02 16:57:04 · 728 阅读 · 0 评论 -
彻底弄明白之java多线程中的volatile
From: http://www.cnblogs.com/yakun/p/3589437.html一. volatite 简述Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的转载 2014-12-16 11:00:17 · 485 阅读 · 0 评论 -
android AsyncTask介绍
http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.htmlAsyncTask和Handler对比1 ) AsyncTask实现的原理,和适用的优缺点AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口转载 2014-12-18 13:42:33 · 331 阅读 · 0 评论 -
ScheduledExecutorService定时周期执行指定的任务
一:简单说明ScheduleExecutorService接口中有四个重要的方法,其中scheduleAtFixedRate和scheduleWithFixedDelay在实现定时程序时比较方便。下面是该接口的原型定义java.util.concurrent.ScheduleExecutorService extends ExecutorService extends Execut转载 2014-12-23 18:27:21 · 407 阅读 · 0 评论 -
多线程编程 实战篇 (四)
[线程的中断]不客气地说,至少有一半人认为,线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门.在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是让线程停止运行,反而是继续执行线程的手段.对于执行一般逻辑的线程,转载 2015-01-13 13:55:11 · 367 阅读 · 0 评论 -
Dalvik虚拟机进程和线程的创建过程分析
From: http://blog.csdn.net/luoshengyang/article/details/8923484我们知道,在Android系统中,Dalvik虚拟机是运行Linux内核之上的。如果我们把Dalvik虚拟机看作是一台机器,那么它也有进程和线程的概念。事实上,我们的确是可以在Java代码中创建进程和线程,也就是Dalvik虚拟机进程和线程。那么,这些Dalvik虚转载 2014-12-09 11:30:13 · 437 阅读 · 0 评论 -
AsyncTask executeOnExecutor
/** * Executes the task with the specified parameters. The task returns * itself (this) so that the caller can keep a reference to it. * * This method is typically used with {@link转载 2015-01-15 16:06:38 · 5766 阅读 · 1 评论 -
linux多线程信号总结
linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。也就是说,信号会随机发个该进程的一个线程。2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。其他实现转载 2015-02-06 12:34:53 · 449 阅读 · 0 评论 -
java中volatile关键字的含义
From: http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机转载 2014-12-16 10:57:05 · 356 阅读 · 0 评论 -
java中关键字volatile的作用
From: http://sakyone.iteye.com/blog/668091用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)转载 2014-12-16 11:03:03 · 383 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
From: http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要转载 2014-12-16 11:18:11 · 421 阅读 · 0 评论 -
Double Check Locking -- Java并发
From: http://jilen.iteye.com/blog/1051540the double-check locking broken 主要解释下内存模型相关的这篇文章http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html Java代码 // Broke转载 2014-12-16 11:22:14 · 467 阅读 · 0 评论 -
The "Double-Checked Locking is Broken" Declaration
From: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htmlThe "Double-Checked Locking is Broken" DeclarationSigned by: David Bacon (IBM Research)Joshua Bloch (Javasoft),Jeff转载 2014-12-16 11:24:01 · 612 阅读 · 0 评论 -
Processes and Threads
From: http://developer.android.com/guide/components/processes-and-threads.htmlProcesses and ThreadsIn this documentProcesses Process lifecycleThreads Worker threadsThread-safe methods转载 2015-02-10 13:14:35 · 459 阅读 · 0 评论 -
Java wait(long timeout)
/** * Causes the current thread to wait until either another thread invokes the * {@link java.lang.Object#notify()} method or the * {@link java.lang.Object#notifyAll()} method for thi转载 2015-01-23 10:49:07 · 1470 阅读 · 0 评论 -
Java线程面试题 Top 50
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会 被提到。在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程转载 2015-02-15 20:28:19 · 769 阅读 · 0 评论 -
Download模块 (十一)
Download模块 (十一)DownloadService,该service是为了实现APP切换到后台仍可以下载而实现的, 这也是Android所提倡的一种后台处理方式。该Service因为会和MainActivity这一端频繁交互,因此设计成为了bind的service.而同时在系统的Notification栏中也会有复数个不可撤销的Notification与此Servic原创 2015-03-01 19:39:42 · 921 阅读 · 0 评论 -
C++ std::mutex 与 const函数
写一个队列需要在其函数之间做同步,首选了std::lock_guard通过RAII的方式来优雅实现确保释放。code很简单,Class自己有一个成员变量mutex, 相关函数在调用前使用其作为构造参数来构造lock_guard即可。编译时遇到了问题,死活编译不过,有了这样的报错: note: candidate constructor not viable: 1st argument (‘cons原创 2017-04-26 20:13:36 · 3444 阅读 · 0 评论