SCJP认证复习~3

本文深入探讨Java中的线程概念,包括线程的创建、控制与交互,以及同步与互斥机制。同时,文章还介绍了四种不同的嵌套类形式及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程
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.一般内类
    它可以被当做外类的一个“实例变量”来看待。因此,四个接入控制符publicprotecteddefaultprivate。也可以用staticfinalabstract定义。
   
只是注意:要在外类的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种权限、staticfinalabstract修饰;
   C.
只可以创建一个匿名类实例;
   D.
匿名类添加任何修饰符(遵循超类的修饰符),也不可实现接口、抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值