首页 > 图灵资讯 > 技术篇>正文
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的接口。