📜  将异常与线程一起使用的Java程序

📅  最后修改于: 2022-05-13 01:55:37.304000             🧑  作者: Mango

将异常与线程一起使用的Java程序

例外 是由于程序员错误或机器错误而导致程序正常执行流程受到干扰而发生的事件。当方法遇到无法处理的异常情况时,会抛出异常作为异常语句。异常由处理程序捕获(这里是 catch 块)。异常由与线程的方法调用堆栈一起定位的处理程序捕获。如果调用方法没有准备好捕捉异常,它会抛出 异常到它的调用方法等等。所以在Java程序中异常处理程序应该有策略地定位,以便程序捕获程序想要从中恢复的所有异常。

线程的生命周期该类实现了 Thread 类或 Runnable 接口,然后扩展类具有 start() 方法运行线程, sleep() 方法使当前正在执行的线程休眠指定的毫秒数等等。                         

在讨论这些方法之前,请说明。应该知道线程的事务以进一步处理异常以便更好地理解。 Java中的线程在任何时间点都处于以下任一状态。一个线程在任何时刻都只处于所示状态之一:

  1. 新的
  2. 可运行
  3. 被封锁
  4. 等待
  5. 定时等待
  6. 已终止

1.类名 RunnableThread 实现了 Runnable 接口,该接口提供了线程执行的 run() 方法。这个类的对象现在是可运行的

2. Thread构造函数用于通过将runnable对象作为参数传递来创建RunnableThread类的对象。

3. start()方法在 Thread 对象上被调用,因为它一旦产生一个线程就会立即返回。

4.线程在run()方法结束时结束,这是正常终止或捕获异常。

5.现在为了创建一个新线程

runner = new Thread(this,threadName) ;

6.为了启动新线程。

runner. start() ;

7 . public void run()是一种可重写的方法,用于显示特定线程的信息。

8. Thread.currentThread().sleep(2000)用于停用线程直到下一个线程开始执行或用于延迟当前线程。

未捕获的异常处理程序将用于演示异常与线程的使用。它是Java提供的一个特定接口,用于在线程run方法中处理异常。

创建线程有两种方法:

  1. 扩展线程类(Java.lang.thread )
  2. 实现可运行接口( Java.lang.thread)

1.异常与线程异常处理

在这里,在扩展线程类的类中创建了一个新线程,其中覆盖了run()方法。这将调用在扩展线程类的类中创建的新线程的入口点。此外, start()方法用于启动和运行程序中的线程。

Java
// Java program to Use exceptions with thread
  
// Importing Classes/Files
import java.io.*;
  
// Child Class(Thread) is inherited from parent Class(GFG)
class GFG extends Thread {
  
    // Function to check if thread is running
    public void run()
    {
        System.out.println("Thread is running");
  
        // Using for loop to iterate
        for (int i = 0; i < 10; ++i) {
            System.out.println("Thread loop running " + i);
        }
    }
  
    // Main Driver Method
    public static void main(String[] args)
    {
  
        // Try-catch block to detect exception
        try {
  
            // Creating new thread
            GFG ob = new GFG();
  
            throw new RuntimeException();
        }
  
        // Catch block to handle exception
        catch (Exception e) {
  
            // Exception handler
            System.out.println(
                "Another thread is not supported");
        }
    }
}


Java
// Java program to Use exceptions with thread
  
/* Note: Dont confuse main method with Main class*/
  
// Importing Classes/Files
import java.io.*;
  
// Child Class(Thread) is inherited
// from parent Class(GFG)
class GFG extends Thread {
    public void run()
    {
        System.out.println("Throwing in "
                           + "MyThread");
        throw new RuntimeException();
    }
}
  
// Main driver method
public class Main {
    public static void main(String[] args)
    {
        GFG t = new GFG();
        t.start();
  
        // try block to deal with exception
        try {
            Thread.sleep(2000);
        }
  
        // catch block to handle the exception
        catch (Exception x) {
            // Print command when exception encountered
            System.out.println("Exception" + x);
        }
  
        // Print command just to show program
        // run successfully
        System.out.println("Completed");
    }
}


输出:

Another thread is not supported

2. 使用 sleep method() 处理异常:线程类的 sleep() 方法用于需要让线程休眠特定时间段以确保代码正常工作的情况。

句法:

范围:

Name

Action performed

millisecondsDuration of time to make a thread sleep
nanoseconds Additional duration of time to make thread sleep but restricted to 999999

返回类型:正如语法本身所见,它不返回任何值。

异常:它确实经常抛出异常,因为Java语言涉及多线程的概念

  1. 当参数值为负时抛出IllegalArgumentException ,因为它在 [0 — +999999] 之间讨论
  2. 当线程被正在进行的线程中断时,会抛出 InterrupteException,正如所讨论的Java支持多线程的概念。

执行:

Java

// Java program to Use exceptions with thread
  
/* Note: Dont confuse main method with Main class*/
  
// Importing Classes/Files
import java.io.*;
  
// Child Class(Thread) is inherited
// from parent Class(GFG)
class GFG extends Thread {
    public void run()
    {
        System.out.println("Throwing in "
                           + "MyThread");
        throw new RuntimeException();
    }
}
  
// Main driver method
public class Main {
    public static void main(String[] args)
    {
        GFG t = new GFG();
        t.start();
  
        // try block to deal with exception
        try {
            Thread.sleep(2000);
        }
  
        // catch block to handle the exception
        catch (Exception x) {
            // Print command when exception encountered
            System.out.println("Exception" + x);
        }
  
        // Print command just to show program
        // run successfully
        System.out.println("Completed");
    }
}

输出:

Throwing in MyThread
Exception in thread "Thread-0" java.lang.RuntimeException
        at testapp.MyThread.run(Main.java:19)
Completed