zoukankan      html  css  js  c++  java
  • java三种实现线程的方法比较

    1.继承Thread

    2.实现Runnable

    1和2的比较,1可以创建不同的任务,每个任务互不干扰,对于2,相当于只执行一个任务,多个任务之间互相影响,比如售票系统,每售出一张票,票数都要减1,这个时候应该用runnable,因为当其操控的是一个实例的时候,所有实现runable的类共用这个实例资源,而runnable还有一个好处,就是有时候需要继承某个类的时候,Thread无法做到,因为它不能多继承,而runnable却可以。

    import java.util.concurrent.Callable;
    
    public class MyCallable implements Callable<Integer>{
    	@Override
    	public Integer call() throws Exception {
    		int i=0;
    		for(;i<10;i++){
    			Thread.sleep(10000);
    			System.out.println(i);
    		}
    		return i;
    	}
    }
    
    
    
    
    
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.FutureTask;
    
    public class Test {
    	public static void main(String[] args){
    		MyCallable myCallable=new MyCallable();
    		FutureTask<Integer> ft=new FutureTask<>(myCallable);
    		//方式一:采用线程池来调用线程
    		ExecutorService es=Executors.newCachedThreadPool();
    		es.submit(ft);
    		es.shutdown();
    		//方式二:采用Thread单任务模式启动线程
    //		new Thread(ft).start();
    	}
    }
    

      如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。

  • 相关阅读:
    ios---图片缩放
    ios---清除缓存
    ReactNative---组件种类
    Linux 用户和用户组管理
    Linux 文件与目录管理
    linux文件的基本属性
    xshell 快速复制打开之前用过的ssh
    ll 和 ls -l的详解
    laravel rbac的用户 角色 权限的crud
    laravel 中的rbac自己简单的实现
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/5862758.html
Copyright © 2011-2022 走看看