Java中的可运行接口

java.lang.Runnable 是一个接口,将由一个类实现,该类的实例将由一个线程执行。有两种方法可以启动一个新线程——子类 Thread 实施 Runnable .不需要子类化 Thread 当一项任务只能通过重写 run() 方法 Runnable .

null

创建新数据库的步骤 Thread 使用 Runnable : 1. 创建一个 Runnable 实施者和实施者 run() 方法 2. 例示 Thread 类并将实现者传递给 Thread , Thread 有一个接受 Runnable 例子 3. 援引 start() 属于 Thread 例如,启动内部呼叫 run() 实现者的身份。援引 start() ,创建一个新的 Thread 它执行用 run() . 使命感 run() 直接创建并开始一个新的 Thread ,它将在同一线程中运行。要启动新的执行行,请调用 start() 在线程上。 实例

public class RunnableDemo {
public static void main(String[] args)
{
System.out.println( "Main thread is- "
+ Thread.currentThread().getName());
Thread t1 = new Thread( new RunnableDemo(). new RunnableImpl());
t1.start();
}
private class RunnableImpl implements Runnable {
public void run()
{
System.out.println(Thread.currentThread().getName()
+ ", executing run() method!" );
}
}
}


输出:

Main thread is- main
Thread-0, executing run() method!

输出显示程序中的两个活动线程——主线程和线程-0,主方法由主线程执行,但调用start on RunnableImpl 创建并启动一个新线程–thread-0。

Runnable遇到异常时会发生什么? Runnable 无法抛出选中的异常,但 RuntimeException 可以从 run() .未捕获的异常由线程的异常处理程序处理,如果JVM无法处理或捕获异常,它将打印堆栈跟踪并终止流。 实例

import java.io.FileNotFoundException;
public class RunnableDemo {
public static void main(String[] args)
{
System.out.println( "Main thread is- " +
Thread.currentThread().getName());
Thread t1 = new Thread( new RunnableDemo(). new RunnableImpl());
t1.start();
}
private class RunnableImpl implements Runnable {
public void run()
{
System.out.println(Thread.currentThread().getName()
+ ", executing run() method!" );
/**
* Checked exception can't be thrown, Runnable must
* handle checked exception itself.
*/
try {
throw new FileNotFoundException();
}
catch (FileNotFoundException e) {
System.out.println( "Must catch here!" );
e.printStackTrace();
}
int r = 1 / 0 ;
/*
* Below commented line is an example
* of thrown RuntimeException.
*/
// throw new NullPointerException();
}
}
}


输出:

java.io.FileNotFoundException
    at RunnableDemo$RunnableImpl.run(RunnableDemo.java:25)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
    at RunnableDemo$RunnableImpl.run(RunnableDemo.java:31)
    at java.lang.Thread.run(Thread.java:745)

结果表明 Runnable 无法抛出已检查的异常, FileNotFoundException 在这种情况下,对于调用方来说,它必须在 run() 但是运行时异常(抛出或自动生成)由JVM自动处理。

参考资料: http://www.javargon.com/2016/11/javalangrunnable-interface.html

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享