Java学习之路_0003多线程(1)

来源:互联网 发布:javaudp网络编程 编辑:程序博客网 时间:2024/06/05 03:59

果然,学的太少,写博客也没什么动力,总希望能做些“大事”,羽翼却还未长成,来复习下多线程吧。

1.内部类和外部类之间的访问规则?2.如果内部类非私有,如何创建内部类?3.如何访问静态内部类中的非静态方法和静态方法?4.如果内部类中定义了静态成员,内部类可以不是静态的吗?5.外部类中的静态方法可以访问非静态内部类吗?6.什么是局部内部类?定义局部内部类需要遵循哪些规则?7.定义匿名内部类的前提?请写出一个匿名内部类。8.Error类和Exception类的区别?9.如果方法声明了多个异常,如何处理?10.RuntimeException和它的子类有什么特殊性?11.throws和throw的区别?12.如果父类方法抛出异常,那么子类定义覆盖父类的方法需要注意什么?13.finally中的代码块什么情况不会被执行?14.创建线程有哪两种方法?15.如何获取当前线程对象?16.同步的前提是什么?17.同步的弊端是什么?18.静态方法和非静态方法默认持有的锁是什么?练习:4.请写出一个死锁程序。/*******************************************************************************************************************************/

1.内部类可以访问外部类的成员,包括私有,通过 外部类名.this.成员名 访问;  外部类要访问内部类需要建立内部类的对象2.Outer.Inner in=new Outer().new Inter()可以创建内部类对象,  但是一般内部类会被外部类私有化3.非静态new Outer.Inner().funtion();静态Out.Inner.function();4.不可以5.不可以,内部类作为外部类的成员之一,静态方法只能访问静态成员。6.定义:在外部类的方法中定义内部类。
   内部类被定义在局部时,不可以被成员修饰符修饰,
  不能访问它所在的局部中的非final修饰的局部变量7.定义匿名内部类的前提:内部类必须是一个类或者实现接口new AbsDemo(){    void show(){        System.out.println(" ");    }.show();8.异常,严重的java通过Error类进行描述,不严重的,通过Exception类进行描述9.声明几个异常,就对应有几个catch块,如果多个catch块中的异常出现继承关系,  父类异常catch块放在最下面10.RuntimeException和它的子类是Exception中的一个特殊的异常,如果在函数内抛出该异常,  函数上可以不用声明,调用者也不用进行处理,编译一样通过。11.throws后面跟的是异常类,可以有多个;throw后面跟的是异常对象,  catch语句内的throw抛出后,函数就结束了,相当于return12.如果父类的函数抛出一个异常A,那么子类中覆盖父类该函数的函数只能抛出异常A或A的子类;如果子类方法会产生其他异常,则只能在内部处理,不能抛出。如果父类方法抛出多个异常,那么子类在覆盖该方法时只能抛出父类异常的子集;如果父类或接口的  方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。13.只有一种情况不会执行:当前面执行到System.exit(0)的时候14.实现Runnable接口或者继承Thread类15.static Thread currentThread()16.(1)多线程(2)同一个锁17.判断锁耗费资源18.静态是所属类,非静态是this
 

练习4

package com.itheima.day03;import java.util.concurrent.locks.*;/***练习4:请写出一个死锁程序*该类用于描述一个死锁,这里用生产和销售线程作演示*/public class Deadlock implements Runnable{private boolean flag;//进程选择标志,值为true执行生产方法,值为false执行消费方法private static int task=0;private static int products=10;private static Lock lockA=new ReentrantLock();private static Lock lockB=new ReentrantLock();public Deadlock(boolean flag){this.flag=flag;}/***生产方法,生产一个消费一个.*/public void produce(){lockA.lock();//A锁if(this.task==10)return;this.task++;this.products++;System.out.println(Thread.currentThread().getName()+":Waiting for consuming.");this.consume();//B锁lockA.unlock();}/***消费方法,消费一个,生产一个.*/public void consume(){lockB.lock();//B锁products--;System.out.println(Thread.currentThread().getName()+":Waiting for producing.");this.produce();//A锁lockB.unlock();}public void run(){if(this.flag)this.produce();elsethis.consume();}}

package com.itheima;import com.itheima.day03.*;/***该类用于演示死锁*@author R*/public class DeadlockDemo{public static void main(String[] args){Thread t1=new Thread(new Deadlock(true));Thread t2=new Thread(new Deadlock(false));t1.start();t2.start();}}


0 0
原创粉丝点击