个人免费网站开发,sem优化师底薪一般多少,企业咨询服务费,用php做网站视频1、通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口#xff0c;重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。 (2).创建Runnable接口实现类的对象。 (3).创建一个Thread类的对象#xff0c;需要封装前面Runnable接口实现类的对象。重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。 (2).创建Runnable接口实现类的对象。 (3).创建一个Thread类的对象需要封装前面Runnable接口实现类的对象。接口可以实现多继承 (4).调用Thread对象的start()方法启动线程 示例代码 [java] view plaincopy span stylefont-size:16px;package demo.thread; public class TreadDemo1 implements Runnable { private int countDown 10; Override // 在run方法中定义任务 public void run() { while (countDown-- 0) { System.out.println(# Thread.currentThread().getName() ( countDown )); } } public static void main(String[] args) { // Runnable中run方法是一个空方法并不会产生任何线程行为必须显式地将一个任务附着到线程上 TreadDemo1 ttnew TreadDemo1(); new Thread(tt).start(); new Thread(tt).start(); System.out.println(火箭发射前倒计时); } } /span 运行结果 火箭发射前倒计时#Thread-1(8)#Thread-1(7)#Thread-1(6)#Thread-1(5)#Thread-1(4)#Thread-1(3)#Thread-1(2)#Thread-1(1)#Thread-1(0)#Thread-0(9) 2、通过继承Thread类创建线程 (1).首先定义一个类去继承Thread父类重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。(2).直接创建一个ThreadDemo2类的对象也可以利用多态性变量声明为父类的类型。 (3).调用start方法线程t启动隐含的调用run()方法。 示例代码 [java] view plaincopy span stylefont-size:16px;package demo.thread; public class ThreadDemo2 extends Thread { private int countDown 10; Override // 在run方法中定义任务 public void run() { while (countDown-- 0) { System.out.println(# this.getName() ( countDown )); } } public static void main(String[] args) { new ThreadDemo2().start(); new ThreadDemo2().start(); // 由于start方法迅速返回所以main线程可以执行其他的操作,此时有两个独立的线程在并发运行 System.out.println(火箭发射前倒计时); } } /span 运行结果 #Thread-0(9)#Thread-0(8)#Thread-0(7)#Thread-0(6)#Thread-0(5)#Thread-0(4)#Thread-0(3)#Thread-0(2)#Thread-0(1)#Thread-0(0)火箭发射前倒计时#Thread-1(9)#Thread-1(8)#Thread-1(7)#Thread-1(6)#Thread-1(5)#Thread-1(4)#Thread-1(3)#Thread-1(2)#Thread-1(1)#Thread-1(0)3、两种方式的比较 首先分析两种方式的输出结果同样是创建了两个线程为什么结果不一样呢 使用实现Runnable接口方式创建线程可以共享同一个目标对象TreadDemo1 ttnew TreadDemo1();实现了多个相同线程处理同一份资源。 然后再看一段来自JDK的解释 Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run 的无参数方法。 设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如Thread 类实现了Runnable。激活的意思是说某个线程已启动并且尚未停止。 此外Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个Thread 实例并将自身作为运行目标就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下如果只想重写run() 方法而不重写其他 Thread 方法那么应使用 Runnable 接口。这很重要因为除非程序员打算修改或增强类的基本行为否则不应为该类创建子类。 采用继承Thread类方式1优点编写简单如果需要访问当前线程无需使用Thread.currentThread()方法直接使用this即可获得当前线程。2缺点因为线程类已经继承了Thread类所以不能再继承其他的父类。采用实现Runnable接口方式1优点线程类只是实现了Runable接口还可以继承其他的类。在这种方式下可以多个线程共享同一个目标对象所以非常适合多个相同线程来处理同一份资源的情况从而可以将CPU代码和数据分开形成清晰的模型较好地体现了面向对象的思想。2缺点编程稍微复杂如果需要访问当前线程必须使用Thread.currentThread()方法。转载于:https://www.cnblogs.com/kinghitomi/archive/2012/01/19/2327405.html