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

多线程学习day1

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

多线程学习day1

如何创建多线程
    通过Thread class —-继承Thread类*Runnable接口—-实现Runnable接口*Callable接口———实现Callable接口

Thread类
新建一个类TestThread1 并继承Thread类 Thread类实现了Runnable接口
重写run方法并在run里编写执行体
在主函数里创建TestThread1对象并调用star()方法开启多线程 如调用run()方法则正常由上到下执行

public class TestThread1 extends Thread{
    public void run(){
        for(int i =0;i <200; i++){
            System.out.println("a--"+i);
        }
    }
    public static void main(String[] args){
        //main线程,主线程
        //创建一个线程对象
        TestThread1 testThread1 = new TestThread1();
        //调用start()方法开启 这个new了的线程 
        testThread1.start();
        for(int i =0;i< 2000; i++){
            System.out.println("aaaaaaaaaaaa----"+i)
        }
    }
}

运行结果 可以看到二者是交替出现

二 图片下载器

需要commons.io包,自行百度下载。

代码如下

package com.cy;

import org.apache.commons.io.FileUtils;

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

public class demo2 extends Thread{ //extends Thread可替换为 implements Runnable ,如更改,start需要使用  new Thread(Runnable对象).start();进行调用
    private String url;      //网络图片地址
    private String name;     //保存的文件名

    //封装
    public demo2(String url, String name){
        this.name =name;
        this.url =url;
    }

    @Override
    //下载执行体
    public void run() {
        Webdownloader webdownload1 =new Webdownloader();
        webdownload1.download(url,name); //新建webdownloader对象并调用其中的download方法
        System.out.println("下载完成,文件名为"+name);
    }
//主函数
    public static void main(String[] args) {
        demo2 demo21 =new demo2("https://img-bss.csdn.net/1643265395158.png","csdn图片1.jpg");    //新建对象并传递图片网址与图片名称,再调用star方法执行
        demo2 demo22 =new demo2("https://img-bss.csdn.net/1643265395158.png","csdn图片2.jpg");
        demo2 demo23 =new demo2("https://img-bss.csdn.net/1643265395158.png","csdn图片3.jpg");
      demo21.start();//如实现Runnable则改为 new Thread(demo21).start();
      demo22.start();//如实现Runnable则改为 new Thread(demo22).start();
      demo23.start();//如实现Runnable则改为 new Thread(demo23).start();
    }
}
//下载器的创建
class Webdownloader{
    public void download(String url,String name){         //创建下载器类并调用commons.io.FileUtils下载
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));    //调用下载方法并传递两个String参数,分别是URL与File (URL会报错,需要异常捕获)
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常--download");
        }
    }
}

代码执行思路

首先导入commons.io包,创建下载器模块:调用FileUtils.copyURLToFile(new URL(url),new File(name));方法,url与file为网络图片地址与保存的文件名。这里需要异常捕获创建一个demo2类新建两个变量url与file 并封装因为demo2继承了Thread,必须重写run()方法,把下载器执行体写在run()里,给个回执。创建主函数并新建demo2对象(给两个String变量赋值)使用对象名.star();来启动下载

运行结果为
可见三个下载线程并不是从上到下依次执行的,而是同时执行下载。哪个先下载完就先报回执。

三 实现Runnable接口

Runnable与Thread大体上一样,只不过在启动方法方面需要配合Thread进行启动
简要代码如下

package com.cy;
//实现Runnable接口,重写run方法,执行线程需要丢入Runnable接口实现类,调用start方法
public class demo3 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 30; i++) {
            System.out.println("Runnable"+i);   //run()里写个循环体
        }
    }
    public static void main(String[] args) {
        demo3 d3=new demo3();       //创建Runnable对象
        new Thread(d3).start();     //Runnable无法直接start(),所以要配合Thread进行启动 格式为   new Thread(Runnable对象).start();
        for (int i = 0; i < 200; i++) {
            System.out.println("RunnableRunnableRunnable"+i);
        }
    }
}

运行结果如下(部分):

Runnable无法直接调用start(),所以要配合Thread进行启动 格式为 new Thread(Runnable对象).start();

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

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

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