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

java三种线程创建

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

java三种线程创建

1.继承Thread方法

2.实现Runnable接口 好处(避免单继承局限性,灵活方便,方便同一个对象被多个线程使用)

3.实现Callable接口 先看Thread方法

1.1继承Thread方法并重写run方法

public class Main extends Thread{
    @Override
    public void run() {
        }
    }

1.2使用.start()开启线程

 Main main= new Main();
        //开启线程
        main.start();

第二种方法实现runnable接口

和Thread差不多是一样的

2.1首先实现runnable接口并重写run方法

public class Thread2  implements Runnable{
    @Override
    public void run() {
        }
    }

2.2开启线程

和Thread方法不太一样

这里写了一个简单的方法运行线程,看一下代码

package com.company;
//Runnable
public class Thread2  implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("写代码"+i);
        }
    }
    public static void main(String[] args) {
        Thread2 thread2=new Thread2();
       // Thread thread=new Thread(thread2);
       // thread.start();
       //上变两个可以简写为下边这个
        new Thread(thread2).start();
        for (int i = 0; i < 20; i++) {
            System.out.println("听讲"+i);
        }
    }
}

所以启动线程要newTread(目标对象)+Thread.start()开启

3.1实现callable接口(下边有例子)

5.1实现Callable接口,需要返回值类型

5.2重写call方法,需要抛出异常

5.3创建目标对象

5.4创建执行服务:

ExecutorService service= Executors.newFixedThreadPool(1);(开启一个服务)

5.5提交执行:

Future r1=service.submit(t1);

5.6获取结果

boolean res1=r1.get();

5.7关闭服务

service.shutdown();

这里使用下载图片的案例做创建线程

package deom1;

import com.company.Thread1;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.*;

public class Thread4 implements Callable {
    private String url; //网络图片保存地址
    private String name;//保存名字
    //构造器
    public Thread4(String url,String name)
    {
        this.name=name;
        this.url=url;
    }
    //重写call方法
    @Override
    public Boolean call() {
       WebDownloader webDownloader=new WebDownloader();
        webDownloader.downLoader(url,name);
        System.out.println("下载了+"+name);
        return true;
    }
    //创建三个线程同时下载三个图片
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Thread4 t1=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","5.jpg");
        Thread4 t2=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","7.jpg");
        Thread4 t3=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","9.jpg");
        //创建服务
        ExecutorService service= Executors.newFixedThreadPool(3);
        //提交执行
        Future r1=service.submit(t1);
        Future r2=service.submit(t2);
        Future r3=service.submit(t3);
        //获取结果
        boolean res1=r1.get();
        boolean res2=r2.get();
        boolean res3=r3.get();
        //关闭服务
        service.shutdown();
    }
}
class WebDownloader {
    public void downLoader(String url, String name) {
        try {
            FileUtils.copyURLToFile(new URL(url), new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常,方法出问题");
        }
    }
}

callable方法不经常用,所以了解即可

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

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

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