java 4种实现线程的方法如下:
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class CallableAndFuture{ public static void main(String[] args) throws Exception{ /** * thread子类实现多线程 */ new Thread() { @Override public void run() { System.out.println("我是线程执行体"); } }.start(); /** * Runnable接口实现多线程 */ new Thread(new Runnable() { @Override public void run() { System.out.println("我是线程执行体"); } }).start(); //FutureTask的两种实现方式如下,FutureTask线程都必须带有返回值 /** * 包装FutureTask去执行线程,Runnable方式 得到返回结果 */ FutureTask<String> task=new FutureTask<String>(new Runnable() { @Override public void run() { System.out.println("我是线程执行体"); } }, "我是线程执行完之后的返回结果"); new Thread(task).start(); System.out.println(task.get());//此方法阻塞主线程等待子线程返回结果 /** * 包装FutureTask去执行线程,Callable方式 得到返回结果 */ FutureTask<String> task2 = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { System.out.println("我是线程执行体"); return "我是线程执行完之后的返回结果"; } }); new Thread(task2).start(); System.out.println(task2.get());//此方法阻塞主线程等待子线程返回结果 } }
Runnable和Callable的区别是,
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以
(4)运行Callable任务可以拿到一个Future对象,Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如果线程没有执行完,Future.get()方法可能会阻塞当前线程的执行;如果线程出现异常,Future.get()会throws InterruptedException或者ExecutionException;如果线程已经取消,会跑出CancellationException。取消由cancel 方法来执行。isDone确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明Future<?> 形式类型、并返回 null 作为底层任务的结果。Future接口的定义如下:
Future模式
Future模式在请求发生时,会先产生一个Future凭证给发出请求的客户,它的作用就像是Proxy物件,同时,由一个新的执行线程持续进行目标物件的生成(Thread-Per-Message),真正的目标物件生成之后,将之设定至Future之中,而当客户端真正需要目标物件时,目标物件也已经准备好,可以让客户提取使用。
结合JDK的Future来看,就是你run线程后,你可以把线程的返回值赋给Future并返回一个Future对象。这时你可以立即拿到这个对象,然后进行下面的逻辑。但是如果你要get这个Future中的线程结果,就会被阻塞直到线程结束。
就相当于现在的期房,你把手续和钱都交上去了,就可以马上拿到合同,但只有合同没有房子。这个时候你已经是有房一族了,你可以先去买家电买装修(走下面的其他逻辑)。但是你要把家电和装修放进去,就必须等到房子完工(阻塞)。
相关推荐
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...
本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...
本篇文章将深入探讨如何使用Java实现多线程文件传输,并涵盖以下几个关键知识点: 1. **线程基础**:在Java中,线程是程序执行的基本单元,可以通过实现`Runnable`接口或继承`Thread`类来创建。`Runnable`接口更...
下面我们将详细探讨如何使用Java实现这样的系统。 首先,我们需要理解队列数据结构。队列是一种先进先出(FIFO,First In First Out)的数据结构,类似于现实生活中的排队。在Java中,我们可以使用`java.util.Queue...
在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在Java中,我们可以通过继承`Thread`类或实现`Runnable`接口来创建线程。在这...
Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当你选择继承`Thread`类时,你需要创建一个新的类,该类直接...
本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量数据切分,并进行并行处理,以提高数据处理速度。 首先,我们需要理解Java中的线程机制。Java通过`Thread`类来创建和管理线程。每个线程...
另一种创建线程的方法是实现Runnable接口,创建一个实现了Runnable接口的类,然后在Thread构造函数中传入该类的实例。线程启动后,会调用Runnable接口的run()方法。 9.4 线程的常用方法: - `start()`: 使线程从...
Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...
java一些简单的多线程用法,适合初学者
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
创建一个新线程通常有两种方式:继承Thread类并重写run()方法,或者实现Runnable接口并提供run()方法。在run()方法中编写线程执行的代码。 进度条通常由主线程负责显示,而耗时任务则在一个或多个工作线程中执行。...
Java实现的多线程RC4加密是一个在编程领域中涉及安全性和并发处理的重要主题。RC4(Rivest Cipher 4)是一种流式加密算法,由Ron Rivest于1987年设计,广泛用于数据保护,如网络通信、文件加密等。而多线程则是Java...
### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...
### JAVA实现线程的方法 在Java编程语言中,线程是一种重要的并发机制,它使得程序能够在同一时间处理多个任务,从而提高程序的响应性和效率。本文将详细介绍Java中实现线程的三种主要方法:继承`Thread`类、实现`...
在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...
在Java中创建线程主要有两种方式:继承`Thread`类或者实现`Runnable`接口。在这个场景下,我们可能创建了两个类,一个是`WriterThread`用于写入成绩,另一个是`ReaderThread`用于读取并显示成绩。 在写入线程(`...
在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新的类,让它继承Thread类时,可以通过重写`run()`方法来定义线程执行的任务。然后创建该类的对象,并...
首先,Java中创建线程主要有两种方法。一种是通过继承Thread类,重写其run()方法,然后实例化并调用start()方法启动线程。例如: ```java class MyThread extends Thread { @Override public void run() { // ...