栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程的四种创建方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程的四种创建方法

1.继承Thread类

Thread类本质上就是Runnable接口的一个实现类,代表一个线程对象。

public class MyThread extebds Thread{
    public void run(){
        //需要在线程中执行的逻辑
    }
}

启动线程的唯一方法就是调用Thread类中定义的start方法,不能直接调用run方法。

这种编程实现线程的方法最大的限制就是java的单根继承,这种方式基本不同。

2.实现Runnable接口

接口定义:

@FunctionalInterface  函数式接口注解声明,提供了JDK1.8中函数式编程的支持lambda表达式

public interface Runnable{
    public abstract void run();  //线程中的执行逻辑
}

实现 Runnable接口可以采用定义独立类、定义内部类【匿名内部类】、lambda【jdk1.8+】

public calss RigthRunnable implements Runnable{
    public void run(){
        for(int i=0;i<50;i++){
            System.out.println("右手。。。。。");
        }
    }
}

启动线程:

Thread t=new Thread(new RightRunnable());
t.start();

定义匿名内部类:

Thread t =new Thread(new Runnable(){
    public voud run(){
        for(int i=0;i<50;i++){
            System.out.println("右手。。。。");
        }
    }
});
t.start();

 lambda写法:

Thread t=new Thread(()->{
    for(int i=0;i<50;i++){
        System.out.println("右手。。。。");
    }
});
t.start();
3.使用Callable和Future接口创建线程

创建Callable接口的实现类,并且实现call()方法。使用FutureTask类来包装Callable接口实现类的对象,并且以FutureTask对象作为Thread对象的target 来创建线程。

定义Callable接口的实现类:

public class MyCallable implements Callable{
    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 i=begin;i 
4.使用线程池创建线程 

创建线程需要花费昂贵的资源和时间,如果每次都是任务到来时才创建线程对象,那么响应时间会边长,而且一个进程能够创建的线程数有限。为了避免这些问题,在程序启动时就创建若干个线程对象用于响应处理,这个就称为线程池,里面的每个线程就叫工作线程。

享元模式:

享元模式Flyweight Pattern主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

优点:大大减少对象的创建,降低系统的内存,使效率提高。

缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。

使用场景:1、系统有大量相似对象。 2、需要缓冲池的场景。

原型模式:

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。

使用线程池的优势

重用存在的线程,减少对象的创建和消亡的开销,性能较好

可以有效地控制最大并发线程数,提供系统资源的利用率,同时避免过多的资源竞争

提供了定时执行、定期执行、单线程、并发数控制等功能

如何选用创建方式: 

一般创建线程对象时不建议使用extends Thread方法:单根继承体系

如果没有返回结果建议使用Runnable接口

如果有返回值建议使用Callable接口

如果使用线程比较频繁建议使用线程池,ThreadPoolExecutor

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号