您的位置:首页 > 其它

SCJP认证复习~3

2006-12-23 21:40 295 查看
线程
1.Thread构造器带有类型Runnable的实例(Runnable实例提供一个public void run()方法),即通过Thread对象的一个实例来引入一个线程.线程从加载的Runnable实例的run方法的开始处执行.线程操作的数据取自指定的Runnable实例,该实例被传递给哪个Thread的构造器.

2.线程不会自己开始,必须调用他的start()方法,调用start可将线程中包含的虚拟CPU设置成一种可运行状态,这意味着jvm可调度执行该线程了.但不意味着线程马上运行.

3.线程通常是抢先式的, 而不是分时间片式的。其模型是:许多线程可运行,但实际上只有一个线程在运行.这个线程继续运行知道不再是可运行的,或者继续运行直到更高优先级的线程到来成为可运行的, 不同优先级的线程间是抢先式的,而同级线程间是轮转式的。

4.一个线程停止运行可以是因为不同原因,可能是因为更高优先级线程的抢占,也可能是因为调用sleep()方法,而即使是因为抢先而停止也不一定就进入可运行队列的前面,因为同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面。

5.线程的基本控制:
测试线程:isAlive()测试线程是否活动,返回真则表示该线程已经启动且尚未完成自己的任务。
访问优先级:
所有可运行线程根据优先级保存于缓冲池中,当一个阻塞的线程变为可运行时,就被放回相应的缓冲池中。getPriority()、setPriority()。三个优先级常量:
Thread.MIN_PRIORITY、Thread.NORM_PRIORITY、Thread.MAX_PRIORITY
线程保持:
Thread.sleep()调用Thread.sleep()方法认为的要求该线程暂停一段时间.为访问一个资源, 线程可能必
须等待,并且一直等到那个资源可以使用才能继续运行.sleep和其他可使线程暂停一段时间的方法都是可中断的,发送interruptedException.
join()终止当前进程参数时间,或终止到join()线程的结束
Thread.yield()方法为其他可运行进程提供机会,当没有时不做任何事情。
resume()负责恢复被挂起的(suspended)线程。该方法首先调用该线程的无参的checkAccess() 方法,这可能在当前线程上抛出SecurityException 异常,如果该线程是活着的(alive)但是被挂起(suspend),它被恢复并继续它的执行进程。

6.线程互斥:多个线程可以共享同一段数据和代码。synchronized关键字限定对数据段的访问。当线程运行到synchronized关键字的时候,检查作为参数传递的对象,并试着从这个对象获取锁标志然后继续执行。当线程执行到synchronized代码块结束时,释放锁标志。当在synchronized代码块中遇到中断、返回或异常时,自动释放锁。

7.线程交互:wait()等待直到notify()必须在synchronized内。

嵌套类

1.一般内类
它可以被当做外类的一个“实例变量”来看待。因此,四个接入控制符public、protected、default、private。也可以用static、final、abstract定义。
只是注意:要在外类的non-static函数外产生该内类对象,须以OuterClassName.InnerClassName的形式指定该内类对象的类型申明。一般内类必须得关联至其外类的某个对象。
一般内类不可拥有static成员。

2.方法内类(本地类)
它属于范围型内类,也就是说你无法在方法外来调用内类,从这一点来讲它可视为方法的局部变量。但是,虽然有它的范畴性,毕竟内类还是类,它不会像局部变量那样随着方法的返回就消失了,它仍旧被java视为类。
A.仅在定义了它们的代码块中是可见的。方法内类可以直接访问外类的任何成员
B.方法内类只能访问该方法中final型局部变量和final型的方法参数
C. 方法内类不可有任何接入控制符修饰(这一点与局部变量相同)不可以是static的,里边也不能定义static类、成员变量、方法。

3.静态内类
它在产生其对象时不需要存在一个外类对象。它可被视为static函数。
static内类可以置于接口中。
静态内部类不可调用外部类的实例变量,它可创建静态成员;new outer.inner();

4.匿名类
它实际上是继承自new类的一个无名类。New传回的reference会被自动向上转型。匿名类不能拥有构造器,但是可以通过其基类默认或带参数的构造器来申明。
A.匿名类不能定义静态的成员、方法或类;
B.匿名类不能用4种权限、static、final、abstract修饰;
C.只可以创建一个匿名类实例;
D.匿名类添加任何修饰符(遵循超类的修饰符),也不可实现接口、抛出异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: