四种多线程方式

Posted in-the-game-of-thrones

tags:

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

 

Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。

 

其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。

 

 

方式一:继承Thread类

  重写run()方法,调用start()方法执行。

  需要注意的是:为什么多线程的启动不是调用run()方法,而是调用start()方法?

      在Java开发中有一门JNI(Java Native Interface)技术,这门技术的特点,使用Java调用本机操作系统的函数,但是这个技术不能离开特定的操作系统。

如果线程想要执行,需要操作系统分配资源。所以此操作严格来讲需要JVM根据不同的操作系统来实现的。

  start()方法中,使用了native关键字修饰了方法,而native关键字时根据不同的操作系统分配不同的资源。

  start()方法,不仅仅要启动多线程执行的代码,还需要根据不同的操作系统来分配资源

 1 package test;
 2 
 3 public class MyThread  
 4     public static void main(String[] args) 
 5         Test t1 = new Test("one");
 6         Test t2 = new Test("two");
 7         Test t3 = new Test("three");
 8         /**
 9          * 调用Thread类中的start方法,才能进行多线程的操作,而不是run方法
10          * start()方法不仅仅启动多线程代码的执行,还需要根据不同的操作系统分配资源    
11          */
12         try //调用Thread类中的sleep方法,让线程等待指定的一段时间
13             Thread.sleep(1000);
14          catch (InterruptedException e) 
15             e.printStackTrace();
16         
17         t1.start();
18         t2.start();
19         t3.start();
20     
21 
22 
23 /**
24  * 继承线程类Thread,重写run()方法,在run方法中实现需要进行的数据操作
25  * @author Administrator
26  *
27  */
28 class Test extends Thread
29     
30     private String name;    
31     
32     public Test(String name) 
33         this.name=name;
34     
35     @Override
36     public void run() //需要进行多进程的操作
37         for (int i = 0; i < 100; i++) 
38             System.out.println(name+"===>"+i);
39         
40     
41 

 方式二:实现Runnable接口

    实现run方法,将Runnable对象作为参数放入到Thread构造方法中,在调用start()方法。

 1 package test;
 2 /**
 3  * 测试Runnable接口
 4  * @author Administrator
 5  *
 6  */
 7 public class MyRunnable 
 8     public static void main(String[] args) 
 9         Demo mr1 = new Demo("A");
10         Demo mr2 = new Demo("B");
11         Demo mr3 = new Demo("C");
12         //将该对象作为参数,传入到Thread类中,在调用start()方法。
13         new Thread(mr1).start();
14         new Thread(mr2).start();
15         new Thread(mr3).start();
16     
17 
18 
19 /**
20  * 实现Runnable接口,实现多线程
21  * @author Administrator
22  *
23  */
24 class Demo implements Runnable 
25     
26     private String name;
27 
28     public Demo(String name) 
29         this.name = name;
30     
31 
32     @Override
33     public void run() 
34         for (int i = 0; i < 300; i++) 
35             System.out.println(name + "==>" + i);
36         
37     
38 
39 

方式三:实现Callable接口通过FutureTask包装器来创建Thread线程

待续。。。

方式四:使用ExecutorService、Callable、Future实现有返回结果的线程

待续。。。

以上是关于四种多线程方式的主要内容,如果未能解决你的问题,请参考以下文章

C# 线程管理:多线程创建方式

两种多线程创建方式区别

JAVA三种多线程实现方法和应用总结

Android中的几种多线程实现

线程池是什么?Java四种线程池的使用介绍

Java多线程之线程池