关闭

Java实现多线程的三种方法

标签: java多线程线程
503人阅读 评论(0) 收藏 举报
分类:

何为线程?

进程 是资源分配的最小单位,由CPU分配内存,而 线程 则是资源调度与执行的单位,一个进程可拥有多条线程,并且共享进程的资源,同一进程内的线程都处于同一内存空间,CPU不会在额外为其分配空间。一个进程允许并发地运行多个线程。

Java实现多线程的三种方法

Java实现多线程主要有三种方式:继承Thread类,实现Runnable接口,实现Callable接口。前两种方式线程执行完没有返回值,而第三种方式有返回值。

1.继承Thread类实现多线程
直接继承Thread类并重写其中run()方法实现多线程,是实现多线程最简单常用的一种方式。实质上Thread类也实现了Runnable接口。在实现线程时只需要创建子类对象,调用start()方法即可,记住不是调用run()方法,调用run()方法只算是普通的调用类内部方法而不算是实现线程,只有调用start()方法,才会生成新线程,并将新线程加入线程组中等待CPU调用。

简单示例:

public class MyThread extends Thread {  
              public void run() {  
               System.out.println("CreatThread");  
              }  
            } 

调用启动线程:

        Thread t2=new Thread();
        Thread t3=new Thread();
        t1.start();
        t2.start();

使用这种方式创建多线程的缺点是:类必须继承Thread类,而Java为单继承,从而不能再继承其他的类了,如果一个类已经继承了其他类(如小程序必须继承Applet类),就无法继承Thread类了。

2.实现Runnable接口实现多线程
实现Runnable接口实现多线程打破了单继承的局限性。只需通过实现Runnable接口并重写其中的run()方法即可。

简单示例:
实现Runnable接口:

public class MyThread implements Runnable {  
              public void run() {  
               System.out.println("CreatThread");  
              }  
            }  

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

MyThread myThread = new MyThread();  
        Thread thread = new Thread(myThread);  
        thread.start(); 

推荐使用实现Runnable接口实现多线程,因为:

  • 1.避免了单继承的局限性。
  • 2.便于多线程间共享资源。

3.使用ExecutorService、Callable、Future实现有返回结果的多线程
返回结果的线程是在JDK1.5中引入的新特征,ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。这种方式实现线程首先的实现Callable接口,并重写其中的call()方法,再借助执行调度服务ExecutorService获取Future对象,通过Future对象实例调用get()就可以获取到Callable任务返回的Object了.

简单示例:
创建Callable实现类,重写call()方法:

class MyThread implements Callable{

    @Override
    public Object call() throws Exception {
        String result="CreatThread";
        return result;
    }

}

创建并调用线程:

public static void main(String[] args) throws InterruptedException, ExecutionException {
        // 创建固定数目线程的线程池。
        ExecutorService pool=Executors.newFixedThreadPool(1);

        //创建Callable实现类实例
        MyThread myThread=new MyThread(); 

        // 执行任务并获取Future对象
        Future future=pool.submit(myThread);

        //获取返回值
        String result=future.get().toString();
        //System.out.println(">>>" + result);

        //停止服务
        pool.shutdownNow();
    }

如此就实现了多线程,通过这种方法实现多线程有返回值,并且可以向外抛出异常,但是代码相对繁琐。

1
0
查看评论

Java中线程的三种实现方式

Java中使用Thread代表线程类,所有的线程类都必须是Thread类或者其子类的实例。每个线程的作用就是完成一定的任务,即执行一段程序流。Java中使用线程执行体来表示这段程序流。 Java中线程的实现方式有如下三种: 1.继承Thread类 public class Thread exte...
  • FFFLLLLLL
  • FFFLLLLLL
  • 2016-08-21 22:39
  • 2244

多线程——Java多线程实现的三种方式

实现多线程的几种方式,建议使用runable实现,不管如何最终都需要thread.start( )来启动线程。
  • xdd19910505
  • xdd19910505
  • 2016-03-22 20:30
  • 2259

JAVA多线程实现的三种方式

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承Thread类实现多线程 继承Thread类的方法...
  • aboy123
  • aboy123
  • 2014-07-31 18:34
  • 452026

Java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了线程对象。 (3)调用线程对...
  • shenggaofei
  • shenggaofei
  • 2016-09-23 20:54
  • 3967

c++创建多线程的三种方式的比较 和 多线程通信

线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。   使用全局变量进行通信 由于属于同一个进...
  • iamherego
  • iamherego
  • 2013-10-14 10:07
  • 6478

Java多线程的四种实现方式

 Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。 其中前两种方式线程执行完后都...
  • a724888
  • a724888
  • 2017-04-10 21:53
  • 1017

Java单例模式的三种实现方式

1, singletonpublic class Singleton { private Singleton() { System.out.println("This is constructor."); } private static Si...
  • gsw204
  • gsw204
  • 2016-09-06 19:37
  • 980

JAVA synchronized 线程经典 生产者消费者 两个完全不同的实现的方式

package sell_ticket; public class ThreadTicket { public static void main(String[] args) { MyThread m = new MyThread(); ...
  • hjm4702192
  • hjm4702192
  • 2012-08-23 16:36
  • 1027

Java多线程-生产者消费者几种实现方式

http://blog.csdn.net/monkey_d_meng/article/details/6251879wait()/notify()方法http://blog.csdn.net/ghsau/article/details/7433673 public void doWork(){...
  • heqiangflytosky
  • heqiangflytosky
  • 2016-06-02 16:53
  • 962

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了线程对象。 (3)调用线程对象的start()方法来...
  • longshengguoji
  • longshengguoji
  • 2014-11-14 22:14
  • 90791
    个人资料
    • 访问:85768次
    • 积分:1861
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:19篇
    • 译文:0篇
    • 评论:48条
    博客专栏
    文章分类
    最新评论
    常用链接