java.lang.Runnable
是一个接口,将由一个类实现,该类的实例将由一个线程执行。有两种方法可以启动一个新线程——子类 Thread
实施 Runnable
.不需要子类化 Thread
当一项任务只能通过重写 run()
方法 Runnable
.
创建新数据库的步骤 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