`
747017186
  • 浏览: 332351 次
社区版块
存档分类
最新评论

java 4种实现线程的方法

    博客分类:
  • java
 
阅读更多

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种实现方式

    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单线程多线程

    这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...

    多线程两种实现方式Java

    本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...

    java实现多线程文件传输

    本篇文章将深入探讨如何使用Java实现多线程文件传输,并涵盖以下几个关键知识点: 1. **线程基础**:在Java中,线程是程序执行的基本单元,可以通过实现`Runnable`接口或继承`Thread`类来创建。`Runnable`接口更...

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

    下面我们将详细探讨如何使用Java实现这样的系统。 首先,我们需要理解队列数据结构。队列是一种先进先出(FIFO,First In First Out)的数据结构,类似于现实生活中的排队。在Java中,我们可以使用`java.util.Queue...

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

    在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在Java中,我们可以通过继承`Thread`类或实现`Runnable`接口来创建线程。在这...

    在Java中创建线程有两种方法

    Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当你选择继承`Thread`类时,你需要创建一个新的类,该类直接...

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

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

    Java多线程机制(讲述java里面与多线程有关的函数)

    另一种创建线程的方法是实现Runnable接口,创建一个实现了Runnable接口的类,然后在Thread构造函数中传入该类的实例。线程启动后,会调用Runnable接口的run()方法。 9.4 线程的常用方法: - `start()`: 使线程从...

    Java多线程知识点总结

    Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...

    java多线程实现动画功能

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

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    java多线程进度条

    创建一个新线程通常有两种方式:继承Thread类并重写run()方法,或者实现Runnable接口并提供run()方法。在run()方法中编写线程执行的代码。 进度条通常由主线程负责显示,而耗时任务则在一个或多个工作线程中执行。...

    Java实现的多线程RC4加密

    Java实现的多线程RC4加密是一个在编程领域中涉及安全性和并发处理的重要主题。RC4(Rivest Cipher 4)是一种流式加密算法,由Ron Rivest于1987年设计,广泛用于数据保护,如网络通信、文件加密等。而多线程则是Java...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    ### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...

    JAVA实现线程的方法

    ### JAVA实现线程的方法 在Java编程语言中,线程是一种重要的并发机制,它使得程序能够在同一时间处理多个任务,从而提高程序的响应性和效率。本文将详细介绍Java中实现线程的三种主要方法:继承`Thread`类、实现`...

    java多线程的两种实现

    在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...

    java程序 两个线程实现学生成绩的读写

    在Java中创建线程主要有两种方式:继承`Thread`类或者实现`Runnable`接口。在这个场景下,我们可能创建了两个类,一个是`WriterThread`用于写入成绩,另一个是`ReaderThread`用于读取并显示成绩。 在写入线程(`...

    java多线程Demo

    在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新的类,让它继承Thread类时,可以通过重写`run()`方法来定义线程执行的任务。然后创建该类的对象,并...

    Java 模拟线程并发

    首先,Java中创建线程主要有两种方法。一种是通过继承Thread类,重写其run()方法,然后实例化并调用start()方法启动线程。例如: ```java class MyThread extends Thread { @Override public void run() { // ...

Global site tag (gtag.js) - Google Analytics