me的lang包相比jdk 1.6的lang包简化很多,me里面没有泛型、注解等其他比较重量级功能类(当然用重量级来描述也不一定合适,具体的参照标准要参阅相关Java ME标准)。官方api地址:
http://java.sun.com/javame/reference/apis/jsr139/
除了基本数据类型的封装类之外,就只有如下几个类了:Class, Math, Object, Runtime, System, Thread, Throwable以及Exception类及其子类和Error类及其子类; 只有一个接口:Runnable。下面抽其中几个类来详细学习:
一.StringBuffer
一个StringBuffer实现了一个可变的字符序列。一个StringBuffer类似一个String,但是它可以被改变。在任何时刻StringBuffer实例都包含一些特定字符串序列,但是通过调用特定的方法会改变StringBuffer长度和内容。
StringBuffer是多线程安全的。The methods are synchronized where necessary so that all the operations on any particular instance behave as if they occur in some serial order that is consistent with the order of the method calls made by each of the individual threads involved.
StringBuffer被编译来实现一对字符串的“+”操作。
For example, the code:
x = "a" + 4 + "c"
is compiled to the equivalent of:
x = new StringBuffer().append("a").append(4).append("c")
.toString()
总之这样做可以避免创建过多的临时String。
StringBuffer最重要的就是append和insert操作,它们被多次重载以接受各种类型数据。已给定的各类型数据都会被有效的转换为string,然后append或者insert到StringBuffer。
每个string buffer都会有容量,但是我们不用关心它,string buffer的相关方法会自动维护这个容量。
二.System
System包含多个有用的类字段(就是类实例,如err和out)。不能被实例化。
方法列表:
1).arraycopy(Object src, int srcOffset, Object dst, int dstOffset, int length)有选择的复制数组
2). static long currentTimeMillis()
3). static void exit(int status)
4). static void gc()
5). static String getProperty(String key)
6). static int identityHashCode(Object x) 调用hashCode()返回结果,不管给定参数的类是否重写hashCode()
三.Thread
JVM允许一个程序拥有多个同时执行的线程。每个线程都有优先级(priority)。有高优先级的thread会优先于低优先级thread执行。有两种可以创建新的可执行线程的方法:1.继承Thread类,重写run方法;2。实现Runnable接口.
四.Object
1. wait
导致当前线程等待直到其它线程对这个对象调用notify()或者notifyAll()方法,或者指定的等待时间(timeout)到期。
当前线程必须拥有这个对象的监听。
这个方法导致当前线程(称作线程T)把自己置于该对象(this object)的等待列表中,然后放弃所有对于该对象的同步声明(我理解为就是放弃对象锁)。线程T此时无法进行完成线程调度目标并处于休眠状态直到一下四种情况之一发生:
1)某个其它线程调用了该对象的notify方法并且线程T恰好被选作为那个要唤醒的线程。
2)某个其它线程调用了这个对象的notifyAll方法
3)某个其它线程interrupts线程T
4)特定的timeout到期,或多或少(就是线程T在timeout到期左右被唤醒)。如果timeout是0,那么这个时间参数将被忽略,它只能等到其它线程直接的notify。
然后线程T从该对象的等待列表中移除并重新启用线程调度(线程执行)。之后它就像其它线程一样来正常竞争该对象的同步权(同步锁);一旦它获得了该对象的控制权,它所有的对该对象的同步化声明会被恢复原状——这就意味着:线程T回到了wait方法被调用前的状况。线程T从wait方法被调用的状态中恢复了过来。因此,从wait方法中恢复,该对象的同步状态(synchronization state)就基本和它调用wait之前的状态一致了。
如果当前线程在等待(waiting)时被其它线程中断(interrupted),那么会抛出一个InterruptedException。这个异常只有在该对象锁状态已经恢复到如上描述时才会抛出。
注意wait方法只把当前线程置于该对象(this object:调用wait的对象)的等待列表中,并放弃该对象的锁;其它被当前线程锁定的对象仍旧保持着锁状态直到线程等待(就是谁调用wait,那么当前线程就放弃调用对象的锁)。
这个方法只能被拥有该对象监听器的线程调用。参见notify方法描述来了解一个线程如何变成对象的监听者。
2.notify
唤醒一个在这个对象的监听器等待的线程。所有等待该对象的线程其中之一被选择唤醒。这个选择是任意的,在执行时决定。通过调用wait方法可以使一个线程处于等待对象监听器的状态。
被唤醒的线程直到当前对象放弃这个对象的锁之后才能被执行。这个被唤醒的线程会和其它活动线程(alive)一块竞争该对象的同步锁(就是该对象资源)。这就是说这个线程在成为该对象锁的下一个拥有权上既不优先也不落后。
这个对象只能被该对象监听器所有者线程调用。一个线程成为对象监听器所有者通过以下三种方式之一:
1)通过执行该对象的一个synchronized实例方法
2)通过执行用于同步对象的同步对象表达式块。
3)对于类类型的对象,通过执行那个类的一个同步的静态方法。
在一个时刻只有一个线程能拥有一个对象的监听。
notify和wait的具体使用例子参看这篇帖子:
http://longdick.iteye.com/blog/453615
分享到:
相关推荐
- CLDC 1.1的核心类库包括java.lang、java.io、java.util等基本包,这些包的源码提供了基础的编程接口,如对象操作、I/O流处理和集合框架。开发者可以通过源码学习这些API的具体实现。 5. **网络与连接** - 在...
VM(虚拟机)负责执行Java核心库,包括`java.lang.*`、`java.unit.*`、`java.io.*`,并支持浮点运算和类`Float`、`Double`等。 9. **安全与网络结构**:网络结构应支持国际化(i18n),CLDC 1.1增加了对浮点字节码...
"Foundation Profile 1.1 Reference Implementation (JSR-219)" 是Java Micro Edition (Java ME)平台的一个重要组成部分,它定义了一套基础功能,旨在为小型设备和嵌入式系统提供精简但完整的Java环境。Java ME是...
- `java.lang.String`(缺少某些有用的功能) - `java.util.StringBuffer` - `java.util.Calendar`, `java.util.Date`(缺少功能) **MIDP(Mobile Information Device Profile)** - **定义** - MIDP是位于CLDC...
在MIDP 2.0中,MIDlet(MIDP的应用程序单元)可以通过`java.lang.System.getProperty()`方法来获取系统属性,这些属性包括: 1. `microedition.profiles`:返回系统支持的所有Profile信息。 2. `microedition....
随着技术的发展,CLDC1.1 添加了浮点运算支持。 **MIDP** MIDP 与 CLDC 结合使用,提供了构建 J2ME 应用程序所需的环境。MIDP 提供了用户界面组件和网络功能,使得开发者可以创建具有图形界面和联网能力的移动应用...
鉴于这些严格的限制条件,CLDC仅包含四个包,其中三个来自标准Java规范并进行了缩减处理(`java.lang`、`java.util`和`java.io`),而另一个包`javax.microedition`则专门为CLDC定制。具体来说,这些包及其功能如下...
这是因为标准的`java.lang.Math.sqrt()`方法可能不可用或者效率较低。 #### 平方根算法 在给定的部分内容中,提供了一个实现平方根算法的示例代码。这个算法适用于J2ME中的CLDC 1.1/MIDP 2.0配置,并且特别考虑了...
CLDC1.1进一步扩展了基础类库,增加了java.lang.ref。 2. Mobile Information Device Profile (MIDP):建立在CLDC之上,定义了应用程序的生命周期管理、用户图形界面(GUI)以及数据管理服务。MIDP提供了一个标准...
- **Java.lang**:包含语言基础类。 - **Java.util**:提供工具类和集合框架。 - **Javax.microedition.io**:通用连接框架,用于网络通信。 **MIDP** 包则提供了以下关键功能: - **Javax.microedition.middlet**...
CLDC1.1相较于1.0增加了浮点运算的支持。 MIDP(Mobile Information Device Profile)是与CLDC配合使用的,它为J2ME应用程序提供了一个运行环境。MIDP包含了MIDlet,这是J2ME应用程序的基本单元。MIDlet有三个关键...
CLDC 1.1 版本引入了对标准Java IO包的支持,这意味着开发者可以使用与J2SE相似的I/O操作,但这些实现针对的是小型设备的限制。`java.io`包提供了诸如`InputStream`, `OutputStream`, `File`, `Reader`, `Writer`等...
在CLDC1.1中,又增加了java.lang.ref支持。 3. **Mobile Information Device Profile (MIDP)**: 建立在CLDC之上,MIDP提供了应用程序的生命周期管理、用户界面UI组件和数据管理服务。它定义了如何在受限设备上...
CLDC的规格之中,只支持java.lang.*、java.io.*、以及java.uti1.*这些类。此版本 也增加了一些攴持“微小装置”的扩充类,如 Javax. microedition.io.*类。然而,此版 木并不支持所有的Java基木类,就标准的 JMECLDO,也...
- **java.lang**:提供核心运行时类,但与J2SE相比有所简化。 - **java.io**:提供基本的输入输出支持,但功能相对有限。 - **java.util**:提供基本的数据结构支持,如ArrayList等。 ##### 1.2 MIDP API - **UI...