首页 > 其他分享 >day18-线程

day18-线程

时间:2022-10-24 16:47:33浏览次数:47  
标签:String Thread start 线程 new day18 public

线程

创建线程方式:

  1. 继承thread类,重写run()方法,调用start开启线程

 
 1 public class TestThread extends Thread{
 2      @Override
 3      public void run() {
 4          //run方法线程体
 5          for (int i = 0; i < 200; i++) {
 6              System.out.println("seeing code---"+i);
 7  ​
 8          }
 9      }
10  ​
11      public static void main(String[] args) {
12          //main线程,主线程
13          //创建一共线程对象
14          TestThread testThread = new TestThread();
15          //调用start方法开启线程 start方法多条线程并行执行
16          //调用run方法开启线程,只有一条执行路径
17          testThread.start();
18  ​
19          for (int i = 0; i < 1000; i++) {
20              System.out.println("learn thread---"+i);
21  ​
22          }
23      }
24  }

 

运行时main程序和线程交替运行。

线程开启不一定立即执行,由cpu调度执行

  1. 创建runnable接口,重写run方法,执行线程需要丢入runnable接口的实现类,调用start方法

 
 1 public class TestThread3 implements Runnable{
 2      @Override
 3      public void run() {
 4          //run方法线程体
 5          for (int i = 0; i < 200; i++) {
 6              System.out.println("seeing code---"+i);
 7  ​
 8          }
 9      }
10  ​
11      public static void main(String[] args) {
12  ​
13          //创建runnable接口的实现类对象
14          TestThread3 testThread3 = new TestThread3();
15          //创建线程对象,通过线程对象来开启线程(代理)
16  //        Thread thread = new Thread(testThread3);
17  //        thread.start();
18          //可以简写
19          new Thread(testThread3).start();
20  ​
21          for (int i = 0; i < 1000; i++) {
22              System.out.println("learn thread---"+i);
23  ​
24          }
25      }
26  }

 

总结

 1  1. 继承Thread类
 2     具备多线程能力
 3     启动:子类对象.start();
 4     不建议使用:避免单继承局限性
 5  ​
 6  2. 实现runnable接口
 7     具有多线程能力
 8     传入目标对象+Thread对象.start();
 9     new Thread(目标对象).start();
10     建议使用:避免单继承局限性,方便同一个对象被多个线程使用

 

练习 实现多线程同步下载照片

  1. 首先写一个下载器方法

    传入照片网址,名称

 
 1 class WebDownloader{
 2      //下载方法
 3      public void downloader(String url,String name){
 4          try {
 5              FileUtils.copyURLToFile(new URL(url),new File(name));
 6          } catch (IOException e) {
 7              e.printStackTrace();
 8              System.out.println("I/O异常,downloader出现异常");
 9          }
10      }
11  }

 

  1. 在类中创建对象,赋值重写run()方法创建下载器对象,对图片进行下载

  2. 在主函数中创建类的对象传入地址和名字,用start方法调用开启线程

 
 1 public class TestThread2 implements Runnable{
 2      private String url;//网络图片地址
 3      private String name;//保存文件名字
 4  ​
 5      public TestThread2(String url,String name){
 6          this.url = url;
 7          this.name = name;
 8      }
 9      @Override
10      public void run() {
11          WebDownloader webDownloader = new WebDownloader();
12          webDownloader.downloader(url,name);
13          System.out.println("下载的文件名为:" +name);
14  ​
15      }
16  ​
17      public static void main(String[] args) {
18          TestThread2 t1 = new TestThread2("https://bkimg.cdn.bcebos.com/pic/503d269759ee3d6d55fb38bad2467a224f4a20a4703b?x-bce-process=image/resize,m_lfit,h_500,limit_1","1.jpg");
19          TestThread2 t2 = new TestThread2("https://bkimg.cdn.bcebos.com/pic/908fa0ec08fa513d2697deb4ac3d42fbb2fb43167302?x-bce-process=image/resize,m_lfit,h_500,limit_1","2.jpg");
20          TestThread2 t3 = new TestThread2("https://bkimg.cdn.bcebos.com/pic/b999a9014c086e061d957f3a93586cf40ad162d95d3b?x-bce-process=image/resize,m_lfit,h_500,limit_1","3.jpg");
21  ​
22          new Thread(t1).start();
23          new Thread(t2).start();
24          new Thread(t3).start();
25  ​
26      }
27  }

 

 

标签:String,Thread,start,线程,new,day18,public
From: https://www.cnblogs.com/GUGUZIZI/p/16821903.html

相关文章

  • 线程安全的Generic Dictionary
     ​​System.Collections.Generic.Dictionary<,>​​只要不修改该集合,Dictionary就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程......
  • 在线程中更新UI
    为了更新UI线程,在新线程中用this.Invoke来更新UI上控件的值。其实这背后是有异常的(有可能会在vs中报出来),因为当你关闭窗体时,this已经不存在了,但访问this.Invoke在新的线程......
  • Java-JVM调优jstack找出最耗cpu的线程&定位问题代码
    Java-JVM调优jstack找出最耗cpu的线程&定位问题代码 https://blog.csdn.net/shasiqq/article/details/109801683   JVM调优jstack找出最耗cpu的线程&定位问题代码......
  • 进程与线程的区别
    进程是资源分配的最小单位,线程是CPU调度的最小单位进程和线程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。另外区别还有资源......
  • 进程与线程的区别
    进程和线程的区别1、首先是定义进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统......
  • 进程与线程
    本章内容进程和线程的概念并行和并发的概念线程基本应用2.1进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据......
  • Java多线程(3):ThreadPool(上)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 开完一趟车完整的过程是启动、行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速、频繁地踩刹车等动作。因......
  • Java生产者消费者问题-多线程-线程同步-线程安全-线程通信
    packageA_ShangGuiGu.Thread.ThreadTest;/***生产者消费者问题:生产者(Producer)将商品(commodity)交给商店(Shop),消费者(Consumer)进行消费*商店里的商品数量上限为20......
  • wait和notify线程通信
    packageA_ShangGuiGu.Thread.ThreadTest;/***线程通信的实例:两个线程交替打印1-100,一人一次*涉及到的方法:*wait():调用wait()方法会使得调用该方法的线程进入阻塞状态。......
  • 进程与线程的联系与区别
    进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。   线程进......