`
China_qd_zjk
  • 浏览: 34630 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

如何实现Java多线程

    博客分类:
  • Java
阅读更多

JVM允许应用程序并发执行,实现多线程一般有以下三种方法:

1、继承Thread类,重写run()方法 Thread本质上是实现了Runnable接口的一个实例,它代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start()方法,start()方法是一个本地方法,他将启动一个新的线程,并执行run()方法,通过自定义直接继承Thread类并重写run()方法就可以启动新线程并执行自己定义的run()方法,但是,调用start()方法后并不是立即执行多线程代码,而是使改线程变成可运行状态,什么时候运行多线程代码由操作系统决定。

例:

class MyThread1 extends Thread{   //创建线程类1

    public void run(){

        System.out.println("线程1"); 

    }

}

class MyThread2 extends Thread{   //创建线程类2

    public void run(){

        System.out.println("线程2"); 

    }

}

public class Test{

    public static void main(String []args){

        MyThread1 myThread1=new MyThread1();

        MyThread2 myThread2=new MyThread2();

        myThread1.start();  //开启线程1

        myThread2.start();  //开启线程2

    }

}

2、实现Runnable接口,实现run()方法

步骤:

1)定义一个类,并实现Runnable接口,实现其中的run()方法

2)创建Thread对象,用实现Runnable借口的对象作为参数实例化该Thread对象;

3)调用Thread的start()方法

class MyThread implements Runnaable{

  public void run(){

    System.out.println("Thread body");

  }

}

public class Test{

  public static void main(String args[]){

    MyThread thread=new MyThread();

    Thread t=new Thread(thread);

    t.start();//开启线程   最后是通过Thread对象的API来控制线程的

  }

}

3.实现Callable接口,重写call()方法

Callable接口与Runnable接口的功能类似,但是提供了比Runnable接口更强大的功能。

1)Callable接口在任务结束之后提供一个返回值,Runnable无法提供这个功能;

2)Callable中的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常;

3)运行Callable可以拿到一个Funture对象,Funture对象表示异步计算的结果,它提供了检查对象是否实现的方法,由于线程属于异步计算模型,因此无法从别的线程得到返回值,在这种情况下,就可以使用Funture来监视目标线程调用call()方法的情况,当调用Funture的get()方法以获取结果时,当前线程就会阻塞,直到call()方法结束返回结果。

public class CallableAndFunture{

  public static class CallableTest implements Callable<String>{

    public String call() throws Exception{

      return "Hello World";

    }

  }

  public static void main(String args[]){

    ExecutorService threadPool = Executor.newSingleThreadExecutor();

    //启动线程

    Funture<String> funture=threadPool.submit(new CallableTest());

    try{

      System.out.println("Waitting thread to finish");

      System.out.println(funture.get());//等待线程结束,并获得返回结果

    }caych(Exception e){

      e.printStackTrace();

    }

  }

}

推荐使用Runnable接口的方式,因为Thread类继承了多种方法可以被派生类使用或者重写,但是只有run()方法是必须被重写的在run()方法中实现了而这个线程的主要功能,我们一般认为,,一个类仅在taeny需要被加强或自改是才会被继承,如果没有必要重写Thread类中的其他方法,那么通过继承Thread类和实现Runnable接口的的效果相同,所以最好还是通过实现Runnable接口的方式来实现多线程。

注意:系统通过调用线程类的start()方法来启动一个线程,此时该线程处于就绪状态而非运行状态,可以随时被JVM调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,线程就会终止。start()方法能够异步的调用run()方法,但直接调用run()方法是同步的,直接调用run()方法无法达到多线程的目的。

分享到:
评论

相关推荐

    java多线程进度条

    总之,实现Java多线程进度条涉及线程同步、共享数据更新以及UI更新的协调。理解这些核心概念,并根据具体需求选择合适的方法,是构建高效、用户友好进度条的关键。在ProgressTest这个示例项目中,你可能会找到更多...

    多线程案例实现 Java多线程

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:通过实现`Runnable`接口和继承`Thread`类。 首先,让我们从实现`Runnable`接口...

    JAVA多线程并发操作全局变量

    NULL 博文链接:https://toknowme.iteye.com/blog/2212529

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    Java多线程实现异步调用实例

    总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程断点下载

    实现Java多线程断点下载的步骤如下: 1. **检查已下载部分**:首先,我们需要读取本地已有的文件,获取其当前大小,这将作为断点续传的起点。 2. **创建线程池**:使用`ExecutorService`创建一个线程池,线程数量...

    java 多线程操作数据库

    本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...

    java多线程实现大批量数据导入源码

    本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量数据切分,并进行并行处理,以提高数据处理速度。 首先,我们需要理解Java中的线程机制。Java通过`Thread`类来创建和管理线程。每个线程...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程实现动画功能

    java一些简单的多线程用法,适合初学者

    基于Java多线程同步的安全性研究.pdf

    2.使用synchronized关键字和Java.util.concurrent.locks包中的Lock对象实现Java多线程同步 3.Java多线程同步机制中可能出现的安全性问题,如可见性、有序性和互斥性问题 4.使用ThreadLocal和Lock对象解决Java多线程...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    java多线程模拟队列实现排队叫号

    总的来说,通过Java多线程和队列数据结构,我们可以有效地模拟排队叫号系统。这种模拟有助于理解和实践并发编程,同时也为我们解决实际问题提供了思路。在这个过程中,我们学习了线程同步、队列操作以及如何在Java中...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java实现多线程文件传输

    在Java编程语言中,实现多线程文件传输是一种优化程序性能、提高系统资源...在提供的`java多线程文件传输`压缩包中,可能包含了实现这些概念的示例代码,通过分析和学习,可以更好地理解多线程文件传输的原理和实践。

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    java多线程分页查询

    #### 二、Java多线程分页查询原理及实现 ##### 1. 分页查询基础概念 分页查询是指在查询数据时,将数据分成多个页面展示,而不是一次性返回所有数据。这种方式能够有效地减少单次查询的数据量,从而提高查询速度和...

    JAVAJAVA多线程教学演示系统论文

    《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...

    Java多线程Executors批量执行数据实现限流

    Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...

Global site tag (gtag.js) - Google Analytics