多线程入门学习

目录

 

一、创建多线程的三种方式

1、继承Thread类

2、通过runnable接口创建

3、通过callable接口创建


一、创建多线程的三种方式

1、继承Thread类

package threadTest1;

/**
 * @author daiy
 * @create 2020-09-13-14:14
 */

//创建多线程方式1,继承thread类,重写run()方法,调用start()方法开启线程
public class ThreadDemo1 extends  Thread{

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("我是多线程---"+i);
        }
    }
    public static void main(String[] args) {
        //创建线程对象
        ThreadDemo1 threadDemo1=new ThreadDemo1();
        //调用start()方法
        threadDemo1.start();
        for (int i = 0; i < 700; i++) {
            System.out.println("我是主方法---"+i);
        }
    }
}

①、执行main方法,可以看到打印结果为,说明两个线程是交替执行的(线程开启不一定立即执行,而是由cpu安排调度来执行的)。

②、通过多线程下载图片

package threadTest1;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

/**
 * @author daiy
 * @create 2020-09-13-14:48
 */
public class ThreadDemo2 extends  Thread{

    private String url;
    private String name;

   public ThreadDemo2 (String url,String name){
       this.name=name;
       this.url=url;
   }

    @Override
    public void run() {
        ThreadDowload threadDowload=new ThreadDowload();
        threadDowload.dowload(url,name);
        System.out.println(name+"正在下载。。。");
    }

    public static void main(String[] args) {
        ThreadDemo2 td1=new ThreadDemo2("https://csdnimg.cn/cdn/content-toolbar/csdn-logo.png?v=20200416.1","1.jpg");
        ThreadDemo2 td2=new ThreadDemo2("https://profile.csdnimg.cn/C/9/7/2_duochirou","2.jpg");
        ThreadDemo2 td3=new ThreadDemo2("https://www.baidu.com/img/flexible/logo/pc/result.png","3.jpg");

        td1.start();
        td2.start();
        td3.start();
    }
}

 class ThreadDowload{
    //文件下载方法
  public void  dowload(String url,String name){
      try {
          FileUtils.copyURLToFile(new URL(url),new File(name));
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
}

打印结果可以看出,几个线程也是并发执行

2、通过runnable接口创建

package threadTest1;

/**
 * @author daiy
 * @create 2020-09-13-15:24
 */

//创建线程方式2:实现runnable接口,重写run()方法
public class ThreadDemo3 implements  Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("我是多线程---"+i);
        }
    }
    public static void main(String[] args) {

        //创建runnable接口实现类对象
        ThreadDemo3 threadDemo3=new ThreadDemo3();

        //创建线程对象,通过线程对象开启线程
        Thread thread=new Thread(threadDemo3);

        thread.start();

        for (int i = 0; i < 700; i++) {
            System.out.println("我是主方法---"+i);
        }
    }
}

结果同继承thread一样

3、通过callable接口创建

package threadTest2;

import org.apache.commons.io.FileUtils;

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

/**
 * @author daiy
 * @create 2020-09-13-18:39
 */
//多线程创建方式3:实现callable接口
public class TestCallable implements Callable {

    private String url;
    private String name;

    public TestCallable (String url,String name){
        this.name=name;
        this.url=url;
    }

    @Override
    public String call() {
        ThreadDowload threadDowload=new ThreadDowload();
        threadDowload.dowload(url,name);
        System.out.println(name+"正在下载。。。");
        return  "下载完了啊";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        TestCallable td1=new TestCallable("https://csdnimg.cn/cdn/content-toolbar/csdn-logo.png?v=20200416.1","1.jpg");
        TestCallable td2=new TestCallable("https://profile.csdnimg.cn/C/9/7/2_duochirou","2.jpg");
        TestCallable td3=new TestCallable("https://www.baidu.com/img/flexible/logo/pc/result.png","3.jpg");

        //创建执行任务
        ExecutorService ser= Executors.newFixedThreadPool(3);
        //提交执行
        Future<String> submit1 = ser.submit(td1);
        Future<String> submit2 = ser.submit(td2);
        Future<String> submit3 = ser.submit(td3);
        //获取结果
        String str1 = submit1.get();
        String str2 = submit2.get();
        String str3 = submit3.get();
        System.out.println(str1+"----"+str2+"-----"+str3);
        //关闭服务
        ser.shutdown();

    }
}

class ThreadDowload{
    //文件下载方法
    public void  dowload(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值