java多线程池引用传递 java 多线程调用接口

发布时间:2023-05-17 11:40:41

实现Java多线程Callable接口

import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask; /* * 1、创建执行线程的方法3:实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。 * * 二、执行 Callable 方式,需要 FutureTask 用于接收运算结果的实现类支持。  FutureTask 是  Future 接口实现类 */public class TestCallable {     public static void main(String[] args) {        ThreadDemo td = new ThreadDemo();         //1.执行 Callable 方式,需要 FutureTask 用于接收运算结果的实现类支持。        FutureTask<Integer> result = new FutureTask<>(td);         new Thread(result).start();         //2.接收线程运算后的结果        try {            Integer sum = result.get();  //FutureTask 可用于 闭锁 类似于CountDownLatch的作用,这里不会在所有线程未执行完成后执行            System.out.println(sum);            System.out.println("------------------------------------");        } catch (InterruptedException | ExecutionException e) {            e.printStackTrace();        }    } } class ThreadDemo implements Callable<Integer> {     @Override    public Integer call() throws Exception {        int sum = 0;         for (int i = 0; i <= 100000; i++) {            sum += i;        }         return sum;    } }

实现Java多线程Runnable接口

/*需求: 实现售票程序创建线程的第二种方式:实现Runnable接口步骤:1。定义类实现Runnable接口2,覆盖Runnable接口中的Run方法,通过Thread将线程运行的代码存储在Run方法中。 类建立线程对象4,将Runnnable接口的子类对象作为实际参数传递给Thread类的构造函数为什么要将Runnable接口中的子类对象传递给Thread的构造函数?因为自定义Run方法所属的对象是Runnable接口的子类对象,所以要让线程指定指定对象的Run方法,必须明确Run方法所属的对象。5,调用Threadstart方法 打开线程并调用Runnnable接口子类的Run方法            实现与继承的区别:                实现方法的好处:避免单一继承的局限性                建议在定义中使用实现方法            两种方式的区别:                继承Thread:在Thread子类run方法中存储线程代码。                Runnnablele实现:在接口的子类run方法中存储线程代码*/ class Tick implements Runnable{private int tick = 50; public void run(){while(true){if(tick > 0)System.out.println( Thread.currentThread().getName() + " sail --" + tick--);}}} class TickDemo{public static void main(String []args){Tick t = new Tick(); Thread t1 = new Thread(t);Thread t2 = new Thread(t);Thread t3 = new Thread(t);Thread t4 = new Thread(t); t1.start();t2.start();t3.start();t4.start(); }}

综上例子可以看出: Callable 和 Future接口的差异

(1)Callable规定的方法是call(),Runnable规定的方法是Run().(2)Callable任务执行后可返回值,Runnable任务不能返回值。(3)call()方法可以抛出异常,而run()方法不能抛出异常。(4)运行Callable任务可获得Future对象, Future表示异步计算的结果。为了等待计算完成,并检索计算结果,提供了检查计算是否完成的方法。Future对象可以了解任务执行情况,可以取消任务执行,也可以获得任务执行结果。Callable是类似Runnable的接口,其他线程可以执行实现Calable接口和实现Runnable的接口。

上一篇 java 队列默认长度 java常用队列
下一篇 xml与java对象的快速互转

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题