Java创建线程的两种方法

Posted ggrrbb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java创建线程的两种方法相关的知识,希望对你有一定的参考价值。

Java实现并启动线程有两种方法

1、写一个类继承自Thread类,重写run方法。用start方法启动线程
2、写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来启动

注意:start方法不是立即执行多线程,而是使得该线程变为就绪态(Runnable)

1.通过扩展Thread类来创建线程

(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。

(2)创建Thread子类的实例,即创建了线程对象。

(3)调用线程对象的start()方法来启动该线程。

 1 public class MutliThreadDemo {
 2     public static void main(String[] args) {
 3         
 4         //创建Thread子类的实例,即创建了线程对象
 5         MutliTread mt1 = new MutliTread("Thread");
 6             
 7         //不立即执行多线程代码,而是使得该线程变为就绪态(Runnable)
 8         mt1.start();
 9     }    
10 }
11 
12 //通过扩展Thread类来创建线程
13 class MutliTread extends Thread{
14     
15     public MutliTread(String name) {
16         this.setName(name);
17         //或super(name)
18     }
19     public void run() {
20         for(int i = 0; i < 10; i++) {
21             System.out.println(Thread.currentThread().getName() + ":" + i);
22         }    
23     }
24 }

2.通过Runnable接口创建线程

(1)定义runnable接口的实现类,并实现该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

(2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

(3)调用线程对象的start()方法来启动该线程。

 1 public class MutliThreadDemo3 {
 2     
 3     public static void main(String[] args) {
 4          
 5         //创建一个Runnable接口实现类
 6         MutliTread3 m = new MutliTread3();
 7         
 8         //实例化线程对象
 9         Thread t1 = new Thread(m, "甲");
10         Thread t2 = new Thread(m, "乙");
11         Thread t3 = new Thread(m, "丙");
12         t1.start();
13         t2.start();
14         t3.start();
15     }    
16 }
17 
18 class MutliTread3 implements Runnable{
19     
20     public void run() {
21         for(int i = 0; i < 10; i++) {
22             System.out.println(Thread.currentThread().getName() + ":" + i);
23         }    
24     }
25 }

当然第二种方法也可通过匿名内部类或lambda表达式实现,会更简洁。以下通过Lambda表达式实现run方法:

 1 public class MutliThreadDemo3 {
 2     
 3     public static void main(String[] args) {
 4         
 5         Runnable r = () -> {    
 6             for(int i = 0; i < 10; i++) {
 7                 System.out.println(Thread.currentThread().getName() + ":" + i);
 8             }    
 9         };
10         
11         //实例化线程对象
12         Thread t1 = new Thread(r, "甲");
13         Thread t2 = new Thread(r, "乙");
14         Thread t3 = new Thread(r, "丙");
15         t1.start();
16         t2.start();
17         t3.start();
18     }    
19 }

注:以上三种方式(本质上是两种)创建的三个线程其实是互相独立的

 

以上是关于Java创建线程的两种方法的主要内容,如果未能解决你的问题,请参考以下文章

java中创建线程的两种方式有啥区别

Java 创建线程的两种方法

创建线程有哪两种方法,它们各自的优缺点是啥?

Java创建线程的两种方法

java_线程创建的两种方法

java中类加载的两种方法是啥?