多线程学习笔记
一、程序,进程和线程的关系
二、线程的创建
(一)步骤:
(二)方法调用分析
- 调用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,但线程是交互执行的所以实际执行结果如下:(注:每次执行结果可能都不同 )