错误 pthread_t *thr; pthread_create(thr,NULL,threadhander(),NULL); 正确 pthread_t thr; pthread_create(&thr,NULL,threadhander(),NULL); 为什么呢?…
Android多线程分析之二:Thread的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处   在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Thread 类都是位于 Framework 层的类,它自身是通过 JNI 转调 dalvik 里面的 Thread 相关方法实现的.因此要分析 Androd 中的线程,就需要分析这两层中的与线程相关的代…
定义 弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型.在发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收. 说明 弱引用,从名字来看就很弱嘛,这种引用指向的对象,一旦在GC时被扫描到,就逃脱不了被回收的命运. 但是,弱引用指向的对象也并不一定就马上会被回收,如果弱引用对象较大,直接进到了老年代,那么就可以苟且偷生到Full GC触发前,所以弱引用对象也可能存在较长的一段时间.一旦一个弱引用对象被垃圾回收器回收,便…
认识变量 变量有两种:primitive数数据类型和引用. 声明变量 Java注重变量.它不会让你将浮点数类型变量放进整数类型的变量中,除非你先跟编译器确认过数字可以损失掉精确度. 为了要让类型安全能过发挥作用,必须声明所有变量的类型. 变量有两种:primitive主数据类型和对象引用. primitive主数据类型用来保存基本类型的值,包括整数.布尔和浮点数等,而对象引用保存的是对象的引用. 声明变量的规则: variables must have type 变量必须拥有类型 variabl…
引用: 引用相当于给引用的对象起一个别名,对引用的操作即是对原对象的操作. 使用方式: int cnt = 1024; int &x = cnt; 一般情况下引用的类型要和被引用对象一致(例外是常量引用可以和对应的非常量对象绑定). 一般在初始化变量时,初始值会被拷贝到新建的对象中.然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用.一旦初始化完成,引用将和它的初始值对象绑定在一起.因而无法令引用重新绑定到另外一个对象,因此引用必须初始化. 引用并非对象,它只是为一个已经…
Thread类是Android为线程操作而做的一个封装.代码在Thread.cpp中,其中还封装了一些与线程同步相关的类. Thread类 Thread类的构造函数中的有一个canCallJava Thread.cpp /system/core/libutils/Threads.cpp 线程创建流程 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Vers…
1.变量 首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间和变量名进行绑定:这个定义很简单,但其实很抽象,例如:int x = 5; 这是一句最简单的变量赋值语句了, 将5赋值于名字叫做x的内存空间,其本质是将值5赋值到一块内存空间,而这个内存空间名叫做x.  变量在内存中的操作其实是需要经过2个步骤的: 找出与变量名相对应的内存地址. 根据找到的地址,取出该地址对应的内存空间里面的值进行操作. 2.指针 指针的特殊之处在于:指针变量相对应的内存空间存储…
自己实现Thread类 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 参考:https://blog.csdn.net/ksn13/article/details/40538083 //方式1:使用类的static函数做转换,配合this指针 class Thread { private: pthread_t id; static void * start_thread(void *arg)…
问题由来 数组为基础实现的集合在退出元素时,并不会将引用指向空指针,过期引用存在对象便不会被回收. 措施 1.WeakHashMap当其中的key没有再被外部引用时,就会被回收.ThreadLocal就用到了WeakHashMap 2.LinkedHashMap的removeEldestEntry方法: 通过覆盖这个方法,加入一定的条件,满足条件返回true.当put进新的值方法返回true时,便移除该map中最老的键. 3.java.lang.ref: Strong Reference Sof…
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这些数据对象的创建过程. 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于 父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通讯机制,如:pipe,fifo,System V IPC机制等,另外通过fork创建子进程系统开销很大,需要将上面描述的每…