2。2。2 Java 多线程的实现
有两种实现Java 多线程的方式:
1) 从Java的Thread类继承实现多线程,实现其run方法,然后声明实例,并调用实例的start方法启动线程。这样的缺点是当该类已经继承于另一个类的时候不能再继承该类。
2)使用Runnable接口实现多线程,首先实现Runable接口类,然后声明Thread实例,调用Thread实例的start方法,开始执行。因此,在Runnable 上或Thread 上调用run()方法仅仅是像普通代码一样执行,并不能启动新的线程[15]。
2。2。3 线程的四种状态
1)产生状态:线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。
2)可执行状态:每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排程器启动它;也可能它已正在执行。
3)死亡状态:当一个线程正常结束,它便处于死亡状态。如一个run()方法的执行完毕就表示该线程的死亡。
4)阻塞状态:当一个线程处于阻塞状态时,系统排程器就会忽略它,不对它进行排程,CPU 不会为其分配执行时间,此时线程无法执行[16]。
2。2。4 线程的优先级、同步及阻塞
1) 线程优先级
当多个线程同时进入可执行状态时,线程的优先级用于指定该线程的优先执行顺序。可以通过Thread 类的getPriority()方法用于获取线程的优先级,如果要设置线程的优先级可以通过setPriority()方法。
2) 线程同步机制
如果有多个线程存在于同一个进程,那么它们共同使用同一个存储空间,这种共享方式节约了系统资源的同时也带来了访问冲突这个问题,在Java 中采用synchronized 关键字机制来有效的避免该问题,它包括两种用法:synchronized 方法和synchronized块。
3) 线程的阻塞
虽然Java 引入的同步机制成功的解决了对共享存储区域的访问冲突,但当任意时刻可能出现所需要的资源未准备就绪,或者同一时刻准备好的资源有多个,为了解决该问题,Java 中引入了阻塞机制来解决这个问题,阻塞指的是暂停当前正在执行的线程,等待资源的就绪。
2。3 Bmob云服务介绍
Bomb云服务平台为开发者提供轻量级的SDK开发包,它是移动APP提供了一个完整的后端云解决方案,让开发者以最小的配置和最简单的方式使用Bmob平台提供的服务,避免开发者编写服务器代码以及维护服务器的操作[17]。论文网
在Bmob平台成功注册后,每个账户可创建多个应用程序,创建的每个应用程序都有其独自的应用程序ID,此后所有的应用程序将凭其ID进行Bmob SDK的使用。即使只有一个应用程序,也可以以不同的版本进行测试和运行。
目前为止,bomb支持的数据类型有String、Integer、Boolean、ArrayList以及BmobObject对象类型。同时Bmob也支持BmobDate、BmobGeoPoint、 BmobFile数据类型。Bmob任何要保存的数据对象必须继承自BmobObject类,这是因为存储的数据是建立在BmobObject基础上的。BmobObject对象包含objectId、createdAt、updatedAt、ACL四个默认的属性,objectId为对象的唯一标示,可以理解为数据表中的主键,对象的创建时间是createdAt,updatedAt是该对象的最后修改时间,ACL为这条数据的操作权限控制[18]。
缺省情况下,Bmo实现类名和表名的映射,提供了类名和表名完全一致的简单方式。BmobSDK为了提供更好的服务,提供了BmobInstallation、BmobUser两个特殊的BmobObject对象来完成不同的功能。 BmobUser对象主要是针对应用中的用户功能而提供的,它对应着web端的User表,使用BmobUser对象可以很方便的在应用中实现用户的注册、登录、邮箱验证等功能,具体的使用方法可查看文档的用户部分。 BmobInstallation对象主要用于应用的安装设备管理中,它对应着web端的Installation表。结合Bmob提供的推送功能,还可以实现将自定义的消息推送给不同的设备终端。