异常与线程


1.异常类结构图:

 

 

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。

Exception(异常):是程序本身可以处理的异常

2.需要记住的几个异常:

FileNotFoundException

ArithmeticException

ClassCastException

ClassNotFoundException

NullPointerException

ArrayIndexOutOfBoundsException

3.异常处理机制:

   try {

    ...... //可能产生异常的代码

   }catch( ExceptionName1 e ) {

    ...... //当产生ExceptionName1型异常时的处置措施

   }catch( ExceptionName2 e ) {

    ...... //当产生ExceptionName2型异常时的处置措施

   } [ finally{

   ......  //无条件执行的语句

}]

(1)try:将可能出现异常的代码放在try语句块中。

(2)catch (Exceptiontype e):catch语句块中是对异常对象进行处理的代码。

(3)如果明确知道产生的是何种异常,可以用该异常类作为catch的参数也可以用其父类作为catch的参数。

(4)每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

(5)finally中的语句,无论是否抛出异常,总会执行。

(6)catch多重异常时,子异常类必须在它们任何父类之前;如果子类在父类后面,子类将永远不会到达,系统会报编译错误。

 

 

4.异常处理的语法规则:

1)  必须在 try 之后添加 catch finally 块。

2) 必须遵循块顺序:若代码同时使用 catch finally 块,则必须将 catch 块放在 try 块之后。

3) catch 块与相应的异常类的类型相关。

4) 一个 try 块可能有多个 catch 块。

5) 可嵌套 try-catch-finally 结构。

6) try-catch-finally 结构中,可重新抛出异常。

7) 除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。

5.抛出异常

  抛出异常有两种方式

  (1)在方法内抛出异常

     例如:throw new NullPointerException();

  (2)在方法体上抛出异常

     例如:public void throwException() throws  NullPointerException{}

      throws 后可以跟多个异常用“,”隔开;

 

 

 

多线程

1.Java中多线程的创建

通过继承Thread

1)  定义子类继承Thread类。

  2)  子类中重写Thread类中的run方法。

  3)  创建Thread子类对象,即创建了线程对象。

  4)  调用线程对象start方法:启动线程,调用run方法。

通过实现Runnable接口

1)定义子类,实现Runnable接口。

2)子类中重写Runnable接口中的run方法。

3)通过Thread类含参构造器创建线程对象。

4)将Runnable接口的子类对象作为实际参数传递给

      Thread类的构造方法中。

5)调用Thread类的start方法:开启线程,调用

      Runnable子类接口的run方法。

2.Thread类的有关方法:

  构造方法:

Thread()

    Thread(String threadname):创建线程并指定线程实例名

    Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法

    Thread(Runnable target, String name):创建新的Thread对象

  start() 启动线程

  run() 每个线程都是通过某个特定Thread对象的run()方法来完成操作的

  static  void  sleep(long millis):令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。

  wait() 使当前线程进入等待(某对象)状态 直到另一线程对该对象发出 notify (notifyAll) 为止。

notify()/notifyAll() 唤醒等待该对象监控权的一个线程

stop(): 强制线程生命期结束

3.多线程程序的优点:

提高应用程序的响应。对图形化界面更有意义,可增强用户体验。

提高计算机系统CPU的利用率

改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改

4.线程的生命周期

 

 

完整的生命周期中通常要经历如下的五种状态:

新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态

就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件

运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态, run()方法定义了线程的操作和功能

阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态

死亡:线程完成了它的全部工作或线程被提前强制性地中止

5.synchronized 使用

         synchronized可以放在方法声明中,表示整个方法

      为同步方法。一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候  

    public synchronized void show (String name){

}

对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块

   synchronized (对象){

          // 需要被同步的代码;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值