标签:结果 color ticket 没有 override str 一个 ret private
在Java中,java使用Thread类代表线程,所有的线程对象都必须是Thread或者其子类的实例,每个线程的作用是完成一定任务,实际上是就是执行一段程序流(一段顺序执行的代码)。实现多线程一共有4种方式,分别是继承于Thread 类、实现 Runnable 接口、带有返回结果的 Callable 接口通过FutureTask包装器来创建T和使用 ExecutorService、Callable、Future 实现有返回结果的线程。
其中,继承 Thread 和 实现 Runnable 接口是实现多线程最常用的两种方式,两者实现的线程是没有返回结果的。
带有返回结果的 Callable 接口通过FutureTask包装器来创建T和使用 ExecutorService、Callable、Future 实现有返回结果的线程。是JDK1.5之后更新的,可以创建带有返回值的线程,两者在java.util.concurrent包中通过的线程池来实现多线程。
Runnable 是一个接口,该接口只定义了一个 run() 方法,由实现类实现。该接口的定义如下:
@FunctionalInterface // 此注解表明这是函数式接口 public interface Runnable { public abstract void run(); }
Runnable的作用是实现多线程。我们可以定义一个类实现 Runnable 接口;然后,通过new Thread(new A())等方式新建线程。
Thread 类本身实现了 Runnable 接口,在Runnable 接口的基础上,扩展了多线程的功能,该类的定义如下:
public class Thread implements Runnable { }
Thread 的作用也是实现多线程。我们可以定义一个类继承 Thread 接口,然后重写 run() 方法;然后通过通过new 自定义类()等方式新建线程。
通过网上经典卖票的的例子,演示 Thread 和 Runnable 的实例。
// 继承Thread 的线程类 class MyThread extends Thread{ private int ticket = 10; @Override public void run() { while(true) { if(this.ticket < 1) break; System.out.println(Thread.currentThread().getName() + "--> 正在卖 " + this.ticket + "张票"); this.ticket--; } } } // main 方法类 public class ThreadDemo { public static void main(String[] args) { Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); // 开启3个线程,每个线程各卖 10 张票 t1.start(); t2.start(); t3.start(); } }
//实现 Runnable接口的自定义线程类 class MyRunnable implements Runnable{ private int ticket = 10; @Override public void run() { while(true) { if(this.ticket < 1) break; System.out.println(Thread.currentThread().getName() + "--> 正在卖 " + this.ticket + "张票"); this.ticket--; } } } public class ThreadDemo { public static void main(String[] args) { Runnable run = new MyRunnable();// 实现 Runnable接口的自定义线程类 // 创建三个 Thread 对象,传递同一个MyRunnable 对象 Thread t1 = new Thread(run); Thread t2 = new Thread(run); Thread t3 = new Thread(run); // 开启3个线程,3个线程共卖10张票 t1.start(); t2.start(); t3.start(); } }
标签:结果 color ticket 没有 override str 一个 ret private
原文地址:https://www.cnblogs.com/lingq/p/12944204.html