详解多线程及Runable 和Thread的区别
多线程及Runable 和Thread的区别 多线程是一种常用的编程技术,用于提高程序的执行效率和响应速度。在 Java 中,多线程可以通过继承 Thread 类或实现 Runnable 接口来实现。虽然这两种方法都可以实现多线程,但它们之间有着很大的区别。 继承 Thread 类 继承 Thread 类是最简单的一种多线程实现方式。Thread 类提供了一个 run 方法,用于定义线程的执行逻辑。在上面的示例代码中,我们继承了 Thread 类,定义了一个 MyThreadTest 类。然后,我们创建了三个 MyThreadTest 对象,分别启动了三个线程,每个线程都执行了 sell ticket 的操作。 然而,在这个示例中,我们发现了一个问题:三个线程都执行了五次循环操作,卖出了 15 张票,而不是预期的 5 张票。这是因为,我们创建了三个 MyThreadTest 对象,每个对象都有自己的 ticket 变量,这三个变量不是共享的。 实现 Runnable 接口 实现 Runnable 接口是另一种多线程实现方式。Runnable 接口提供了一个 run 方法,用于定义线程的执行逻辑。在上面的示例代码中,我们实现了 Runnable 接口,定义了一个 MyRunnableTest 类。然后,我们创建了一个 MyRunnableTest 对象,并将其作为参数传递给三个 Thread 对象,每个 Thread 对象都启动了一个线程,执行了 sell ticket 的操作。 与继承 Thread 类不同的是,我们只创建了一个 MyRunnableTest 对象,而三个 Thread 对象都共享了这个对象的资源。因此,三个线程共享了同一个 ticket 变量,卖出了预期的 5 张票。 Thread 和 Runnable 的区别 继承 Thread 类和实现 Runnable 接口都是实现多线程的有效方法,但它们之间有着很大的区别: * 继承 Thread 类需要继承 Thread 类,并重写 run 方法,而实现 Runnable 接口需要实现 Runnable 接口,并重写 run 方法。 * 继承 Thread 类时,每个线程都有自己的资源,不共享;而实现 Runnable 接口时,多个线程可以共享同一个资源。 * 继承 Thread 类时,需要创建多个对象,每个对象都有自己的资源;而实现 Runnable 接口时,只需要创建一个对象,多个线程可以共享这个对象的资源。 因此,在选择继承 Thread 类或实现 Runnable 接口时,需要根据实际情况进行选择。如果需要每个线程都有自己的资源,可以继承 Thread 类;如果需要多个线程共享同一个资源,可以实现 Runnable 接口。