多线程学习笔记

一、程序,进程和线程的关系

二、线程的创建

(一)步骤:

图片说明

(二)方法调用分析

图片说明

  • 调用run()方法时,当代码执行到run()方法时会先执行run()方法中的内容,然后执行后面的代码。
  • 调用start()方法时,是主线程和子线程交替执行的。(结果如下图)

图片说明

  • 线程是cpu安排调度的,所以每个线程的优先级是相同的。即每次执行的结果可能都不一样
//实现多线程下载图片
public class ThreadTest01 extends Thread {

    private String url;//图片地址
    private String name;//图片名字
 //构造函数
    public ThreadTest01 (String url,String name){
        this.url=url;
        this.name=name;
    }

    //下载图片线程执行体
    @Override
    public void run() {
        Download d=new Download();
        d.download(url,name);
        System.out.println("下载文件名为:"+name);
    }

    public static void main(String[] args) {
        ThreadTest01 t1=new ThreadTest01("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581879223189&di=7c8c45f53c6acb8cb980c9a7bda70d93&imgtype=0&src=http%3A%2F%2Fimg14.3lian.com%2F201611%2F02%2F7d5d6d6765845fd61f09df6a5a86819e.jpg","photo1");
        ThreadTest01 t2=new ThreadTest01("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581879344523&di=33b471e9673eae846d1f83dd113885a1&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Fd%2F546adf5959722.jpg","photo2");
        ThreadTest01 t3=new ThreadTest01("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=138607568,1310156027&fm=15&gp=0.jpg","photo3");
      //启动线程
        t1.start();
        t2.start();
        t3.start();
    }
}
//下载器
class Download{
    //下载方法
    public void download(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 代码中的逻辑执行顺序是先t1->t2->t3,但线程是交互执行的所以实际执行结果如下:(注:每次执行结果可能都不同 )
    图片说明
全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务