线程的编程4种实现方法(下)

线程的编程4种实现方法(下)

3、使用Callable和Future接口创建线程
具体是创建Callable接口的实现类,并实现call()方法。并使用FutureTask类来包装Callable实现类的对象,且以此 FutureTask对象作为Thread对象的target来创建线程
接口定义
Callable接口用于定义线程的执行逻辑

@FuntionalInterface //属于函数式接口,所以可以直接使用lambda表达式进行定义 
public interface Callable<V>{ //<>写法叫做泛型,用于定义返回的数据类型 
V call()throws Exception; 
}

Future接口用于Callable接口中call方法的执行结果,并可以测试Callable的执行情况

public interface Future<V>{//用于获取Callable接口中的call方法的执行结果 
boolean cancel(boolean mayIntersupteIfRunning); 
boolean isCancelled(); 
boolean isDone(); 
V get() throws InterruptedException, ExecutionException; 
V get(long timeout, TimeUnit unit)throws InterruptedException, ExecutionException; }

系统提供了一个Future接口的实现类FutureTask

public class FutureTask<V> implements RunnableFuture<V> //这个实现类实现了两个接口Runnable和 Future

使用方法:
1.定义Callable接口实现类

public class MyCallable implements Callable<Integer>{ 
int begin=0;
 int end=0;
  public MyCallable(int begin, int end){
   this.begin=begin; 
   this.end=end; 
   }
   public Integer call()throws Exception{
    int res=0; 
    for(int k=begin; k<=end; k++) 
    res+=k;
     System.out.println(Thread.currentThread()+"---"+res);
      return res; 
      } 
     }```
2.调用

```java
FutureTask[] arr=new FutureTask[10];
 for(int i=0;i<10;i++){
  arr[i]=new FutureTask<>(new MyCallable(i*10+1,(i+1)*10)); 
  Thread t=new Thread(arr[i]); 
  t.start(); 
  }
  int res=0; 
  for(int i=0;i<arr.length;i++) 
  res+=((Integer)arr[i].get()); 
  System.out.println("计算结果为:"+res);

**注意:**FutureTask实现了Future和Runnable接口,所以new Thread(futureTask),当执行thread.start()方法时会自 动调用Callable接口实现中的call方法。当调用futureTask.get()方法时可以获取对应的线程对象的执行结果,如果 线程并没有返回时,当前线程阻塞等待。

4、使用线程池创建线程
享元模式
享元模式Flyweight Pattern主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于 结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式
**优点:**大大减少对象的创建,降低系统内存的使用,以提高程序的执行效率。
**缺点:**提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部 状态的变化而变化,否则会造成系统的混乱。
不考虑线程问题

public interface IShape { 
void draw(); 
}
public class Circle implements IShape { 
public void draw() { 
System.out.println("我画一个圆"); 
} 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值