Java创建多线的方式

方式一:继承Thread类

① 定义继承Thread类的子类;
② 重写run()方法,run()方法的主体即为线程体
③ 实例化继承Thread的子类的对象,即创建线程对象;
④ 通过实例对象调用start()方法启动线程
  注意:想要启动多线程必须调用start()方法,通过start()方法调用run()方法,若手动调用run()方法,则不会启动多线程。
      因为run()方法必须由JVM调用,至于什么时候调用,执行过程的控制都有操作系统的调度决定。

 1 package com.exercise.mulTreadTest;
 2 //方式1: 通过继承Thread类的方式实现多线程:
 3 
 4 /**
 5  * ① 定义继承Thread类的子类;
 6  * ② 重写run()方法,run()方法的主体即为线程体
 7  * ③ 实例化继承Thread的子类的对象,即创建线程对象;
 8  * ④ 通过实例对象调用start()方法启动线程
 9  */
10 public class extendsThread {
11     public static void main(String[] args) {
12         myThread1 thread1 = new myThread1();
13         thread1.start();
14 
15         myThread1 thread2 = new myThread1();
16         thread2.start();
17     }
18 }
19 
20 class myThread1 extends Thread{
21     @Override
22     public void run() {
23         for (int i = 0; i < 100; i++) {
24             if (i % 2 == 0){
25                 System.out.println(Thread.currentThread().getName() + " : " + i);
26             }
27         }
28     }
29 }

上述代码创建多线程的运行结果如下:可见线程1和线程2交替执行。

Java创建多线的方式

 

 

 

方式二:实现Runnable接口

 ① 创建一个实现Runnable接口的子类myThread;
② 重写Runnable接口中的run()方法;
③ 创建该子类myThread的对象;
④ 创建Thread类的对象,并且将子类myThread创建的对象作为Thread类含参构造器的实参
⑤ 调用start()方法启动线程
package com.exercise.mulTreadTest;

/**
 * 方式二:实现Runnable接口
 * ① 创建一个实现Runnable接口的子类myThread;
 * ② 重写Runnable接口中的run()方法;
 * ③ 创建该子类myThread的对象;
 * ④ 创建Thread类的对象,并且将子类myThread创建的对象作为Thread类含参构造器的实参
 * ⑤ 调用start()方法启动线程
 *
 */
public class implRunnable{
    public static void main(String[] args) {
        myThread2 myThread2 = new myThread2();
        Thread thread1 = new Thread(myThread2);
        Thread thread2 = new Thread(myThread2);
        thread1.start();
        thread2.start();
    }

}

class myThread2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + " : " + i);
            }
        }
    }
}
继承Thread类和实现Runnable接口创建多线程方式的区别:
区别:
  ①继承Thread类的方式重写了Thread类的run()方法并将线程代码放在里面;
  ②实现Runnable接口的方式重写了Runnable接口中的run()方法,线程代码存在其中。

实现Runnable接口创建多线的好处:
  ①避免单继承性的局限性:接口的好处
  ②多个接口共享同一个接口实现类的对象,非常适合多个相同线程处理同一份资源。
 
上一篇:JDK1.8 ThreadPoolExecutor (待完结)


下一篇:通过实现Runnable接口的方式创建线程