JAVA的部分术语中英文对照.docx

上传人:b****6 文档编号:7305595 上传时间:2023-01-22 格式:DOCX 页数:13 大小:23.77KB
下载 相关 举报
JAVA的部分术语中英文对照.docx_第1页
第1页 / 共13页
JAVA的部分术语中英文对照.docx_第2页
第2页 / 共13页
JAVA的部分术语中英文对照.docx_第3页
第3页 / 共13页
JAVA的部分术语中英文对照.docx_第4页
第4页 / 共13页
JAVA的部分术语中英文对照.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

JAVA的部分术语中英文对照.docx

《JAVA的部分术语中英文对照.docx》由会员分享,可在线阅读,更多相关《JAVA的部分术语中英文对照.docx(13页珍藏版)》请在冰豆网上搜索。

JAVA的部分术语中英文对照.docx

JAVA的部分术语中英文对照

JAVA的部分术语中英文对照

accesscontrol访问控制

accessibility可访问能力,可访问性

accessormethod访问方法

adapterpattern适配器模式

anonymousclass匿名类

antipattern反模式

APIApplicationProgrammingInterface,应用编程接口

APIelementAPI元素

array数组

assertion断言

binarycompatibility二进制兼容性

callback回调

callbackframework回调框架

checkedexception被检查的异常

class类

client客户

comparator比较器

composition复合

concretestrategy具体策略

constantinterface常量接口

copyconstructor拷贝构造函数

customserializedform自定义的序列化形式

decoratorpatterndecorator模式

defaultaccess缺省访问

defaultconstructor缺省构造函数

defensivecopy保护性拷贝

delegation委托

deserializing反序列化

designpattern设计模式

discriminatedunion可区分的联合

doccomment文档注释

documentationcomment文档注释

double-checkidiom双重检查模式

encapsulation封装

enclosinginstance外围实例

enumeratedtype可枚举的类型

exception异常

exceptionchaining异常链接

exceptiontranslation异常转译

exportedAPI导出的API

extend扩展

failureatomicity失败原子性

field域

finalizerguardian终结函数守卫者

forwarding转发

forwardingmethod转发方法

functionobject函数对象

functionpointer函数指针

generalcontract通用约定

HTMLvaliditycheckerHTML有效性检查器

idiom习惯用法,模式

immutable非可变的

implement实现(用作动词)

implementation实现(用作名词)

implementationinheritance实现继承

informationhiding信息隐藏

inheritance继承

innerclass内部类

integralconstant整值常量

interface接口

interfaceinheritance接口继承

JavaCryptographyExtensionJava密码子系统扩展,简称JCE

lazyinitialization迟缓初始化

localclass局部类

member成员

memberclass成员类

memberinterface成员接口

memoryfootprint内存印迹

memorymodel内存模型

method方法

mixin混合类型

module模块

mutator改变对象属性的方法

namingconvention命名惯例

nativemethod本地方法

nativeobject本地对象

nestedclass嵌套类

nonstaticmemberclass非静态的成员类

object对象

objectpool对象池

objectserialization对象的序列化

obsoletereference过期引用

opencall开放调用

overload重载

override改写

package-private包-私有

performancemodel性能模型

postcondition后置条件

precondition前提条件

preconditionviolation前提违例

primitive原语的,原语类型

private私有的

public公有的

redundantfield冗余域

referencetype引用类型

reflection映像机制

register注册

roundingmode舍入模式

run-timeexception运行时刻异常

safelanguage安全的语言

safety安全性

semanticcompatibility语义兼容性

self-use自用(性)

serialversionUID序列版本UID

serializedform序列化形式

serializing序列化

serviceproviderframework服务提供者框架

signature原型

singletonpatternsingleton模式

skeletalimplementation骨架实现

statetransition状态转变

staticfactorymethod静态工厂方法

staticmemberclass静态的成员类

storagepool存储池

strategyinterface策略接口

strategypattern策略模式

streamuniqueidentifier流的唯一标识符

subclassing子类化

summarydescription概要描述

syntheticfield合成域

threadgroup线程组

threadsafety线程安全性

thread-compatible线程兼容的

thread-safe线程安全的

top-levelclass顶级类

typesafeenumclass类型安全的枚举类

typesafeenumpattern类型安全的枚举模式

uncheckedexception未被检查的异常

unintentionalobjectretention无意识的对象保持

utilityclass工具类

valueclass值类

valuetype值类型

view视图

visitorpatternvisitor模式

wrapperclass包装类

Java多线程编程详解natrium11(原作)

关键字Java多线程通信同步阻塞

一:

理解多线程

多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。

线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

多个线程的执行是并发的,也就是在逻辑上撏睌,而不管是否是物理上的撏睌。

如果系统只有一个CPU,那么真正的撏睌是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。

二:

在Java中实现多线程

我们不妨设想,为了创建一个新的线程,我们需要做些什么?

很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!

真是神奇!

Java是如何做到这一点的?

通过类!

作为一个完全面向对象的语言,Java提供了类java.lang.Thread来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。

那么如何提供给Java我们要线程执行的代码呢?

让我们来看一看Thread类。

Thread类最重要的方法是run(),它为Thread类的方法start()所调用,提供我们的线程所要执行的代码。

为了指定我们自己的代码,只需要覆盖它!

方法一:

继承Thread类,覆盖方法run()

我们在创建的Thread类的子类中重写run(),加入线程所要执行的代码即可。

下面是一个例子:

publicclassMyThreadextendsThread{

intcount=1,number;

publicMyThread(intnum){

number=num;

System.out.println("创建线程"+number);

}

publicvoidrun(){

while(true){

System.out.println("线程"+number+":

计数"+count);

if(++count==6)return;

}

}

publicstaticvoidmain(Stringargs[]){

for(inti=0;i<5;i++)newMyThread(i+1).start();

}

}

这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自Applet类),则无法再继承Thread类,这时如果我们又不想建立一个新的类,应该怎么办呢?

我们不妨来探索一种新的方法:

我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给Thread类的实例,有点类似回调函数。

但是Java没有指针,我们只能传递一个包含这个方法的类的实例。

那么如何限制这个类必须包含这一方法呢?

当然是使用接口!

(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?

Java提供了接口java.lang.Runnable来支持这种方法。

方法二:

实现Runnable接口

Runnable接口只有一个方法run(),我们声明自己的类实现Runnable接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。

但是Runnable接口并没有任何对线程的支持,我们还必须创建Thread类的实例,这一点通过Thread类的构造函数

publicThread(Runnabletarget);

来实现。

下面是一个例子:

publicclassMyThreadimplementsRunnable{

intcount=1,number;

publicMyThread(intnum){

number=num;

System.out.println("创建线程"+number);

}

publicvoidrun(){

while(true){

System.out.println("线程"+number+":

计数"+count);

if(++count==6)return;

}

}

publicstaticvoidmain(Stringargs[]){

for(inti=0;i<5;i++)newThread(newMyThread(i+1)).start();

}

}

严格地说,创建Thread子类的实例也是可行的,但是必须注意的是,该子类必须没有覆盖Thread类的run方法,否则该线程执行的将是子类的run方法,而不是我

们用以实现Runnable接口的类的run方法,对此大家不妨试验一下。

使用Runnable接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承Thread来得紧凑。

综上所述,两种方法各有千秋,大家可以灵活运用。

下面让我们一起来研究一下多线程使用中的一些问题。

三:

线程的四种状态

1.新状态:

线程已被创建但尚未执行(start()尚未被调用)。

2.可执行状态:

线程可以执行,虽然不一定正在执行。

CPU时间随时可能被分配给该线程,从而使得它执行。

3.死亡状态:

正常情况下run()返回使得线程死亡。

调用stop()或destroy()亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。

4.阻塞状态:

线程不会被分配CPU时间,无法执行。

四:

线程的优先级

线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定给谁分配CPU时间,优先级高的线程有更大的机会获得CPU时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。

你可以调用Thread类的方法getPriority()和setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和

10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

五:

线程的同步

由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。

Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。

由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized

关键字,它包括两种用法:

synchronized方法和synchronized块。

1.synchronized方法:

通过在方法声明中加入synchronized关键字来声明synchronized方法。

如:

publicsynchronizedvoidaccessVal(intnewVal);

synchronized方法控制对类成员变量的访问:

每个类实例对应一把锁,每个synchronized方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方

法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

这种机制确保了同一时刻对于每一个类实例,其所有声明为synchronized的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为synchronized)。

在Java中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为synchronized,以控制其对类的静态成员变量的访问。

synchronized方法的缺陷:

若将一个大的方法声明为synchronized将会大大影响效率,典型地,若将线程类的方法run()声明为synchronized,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何synchronized方法的调用都永远不会成功。

当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为synchronized,并在主方法中调用来解决这一问题,但是Java为我们提供了更好的解决办法,那就是synchronized块。

2.synchronized块:

通过synchronized关键字来声明synchronized块。

语法如下:

synchronized(syncObject){

//允许访问控制的代码

}

synchronized块是这样一个代码块,其中的代码必须获得对象syncObject(如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。

由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。

六:

线程的阻塞

为了解决对共享存储区的访问冲突,Java引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。

为了解决这种情况下的访问控制问题,Java引入了对阻塞机制的支持。

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。

Java提供了大量方法来支持阻塞,下面让我们逐一分析。

1.sleep()方法:

sleep()允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU时间,指定的时间一过,线程重新进入可执行状态。

典型地,sleep()被用在等待某个资源就绪的情形:

测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。

2.suspend()和resume()方法:

两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()被调用,才能使得线程重新进入可执行状态。

典型地,suspend()和resume()被用在等待另一个线程产生的结果的情形:

测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用resume()使其恢复。

3.yield()方法:

yield()使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得CPU

时间。

调用yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。

4.wait()和notify()方法:

两个方法配套使用,wait()使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的notify()被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的notify()

被调用。

初看起来它们与suspend()和resume()方法对没有什么分别,但是事实上它们是截然不同的。

区别的核心在于,前面叙述的所有方法,阻塞时都不会释放占用的锁(如果占用了的话),而这一对方法则相反。

上述的核心区别导致了一系列的细节上的区别。

首先,前面叙述的所有方法都隶属于Thread类,但是这一对却直接隶属于Object类,也就是说,所有对象都拥有这一对方法。

初看起来这十分不可思议,但是实际上却是很自然的,因为这一对方法阻塞时要释放占用的锁,而锁是任何对象都具有的,调用任意对象的wait()方法导致线程阻塞,并且该对象上的锁被释放。

而调用任意对象的notify()方法则导致因调用该对象的wait()方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。

其次,前面叙述的所有方法都可在任何位置调用,但是这一对方法却必须在synchronized方法或块中调用,理由也很简单,只有在

synchronized方法或块中当前线程才占有锁,才有锁可以释放。

同样的道理,调用这一对方法的对象上的锁必须为当前线程所拥有,这样才有锁可以释放。

因此,这一对方法调用必须放置在这样的synchronized方法或块中,该方法或块的上锁对象就是调用这一对方法的对象。

若不满足这一条件,则程序虽然仍能编译,但在运行时会出现IllegalMonitorStateException异常。

wait()和notify()方法的上述特性决定了它们经常和synchronized方法或块一起使用,将它们和操作系统的进程间通信机制作一个比较就会发现它们的相似性:

synchronized方法或块提供了类似于操作系统原语的功能,它们的执行不会受到多线程机制的干扰,而这一对方法则相当于block和wakeup原语(这一对方法均声明为synchronized)。

它们的结合使得我们可以实现操作系统上一系列精妙的进程间通信的算法(如信号量算法),并用于解决各种复杂的线程间通信问题。

关于wait()和notify()方法最后再说明两点:

第一:

调用notify()方法导致解除阻塞的线程是从因调用该对象的wait()方法而阻塞的线程中随机选取的,我们无法预料哪一个线程将会被选择,所以编程时要特别小心,避免因这种不确定性而产生问题。

第二:

除了notify(),还有一个方法notifyAll()也可起到类似作用,唯一的区别在于,调用notifyAll()方法将把因调用该对象的wait()

方法而阻塞的所有线程一次性全部解除阻塞。

当然,只有获得锁的那一个线程才能进入可执行状态。

谈到阻塞,就不能不谈一谈死锁,略一分析就能发现,suspend()方法和不指定超时期限的wait()方法的调用都可能产生死锁。

遗憾的是,Java并不在语言级别上支持死锁的避免,我们在编程中必须小心地避免死锁。

以上我们对Java中实现线程阻塞的各种方法作了一番分析,我们重点分析了wait()和notify()方法,因为它们的功能最强大,使用也最灵活,但是这也导致了它们的效率较低,较容易出错。

实际使用中我们应该灵活使用各种方法,以便更好地达到我们的目的。

七:

守护线程

守护线程是一类特殊的线程,它和普通线程的区别在于它并不是应用程序的核心部分,当一个应用程序的所有非守护线程终止运行时,即使仍

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1