码迷,mamicode.com
首页 > 编程语言 > 详细

四种多线程方式

时间:2019-07-19 23:44:14      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:his   操作系统。   严格   资源   read   开发   cal   ice   还需   

 

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实现有返回结果的线程

待续。。。

四种多线程方式

标签:his   操作系统。   严格   资源   read   开发   cal   ice   还需   

原文地址:https://www.cnblogs.com/in-the-game-of-thrones/p/11216125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!