Creación de subprocesos múltiples (1)

Creación de subprocesos múltiples (1)

  1. Programa: Es una colección ordenada de instrucciones y datos. No tiene ningún significado operativo. Es un concepto impactante.

  2. Proceso: Es un proceso de ejecución de la ejecución de un programa, es un concepto dinámico y una unidad de asignación de recursos del sistema. Por lo general, un proceso puede contener varios subprocesos. Por supuesto, hay al menos un subproceso en un proceso, de lo contrario no tiene significado. El subproceso es la unidad de programación y ejecución de la CPU.

  3. Thread: Thread es una ruta de ejecución independiente

    • Cuando el programa se está ejecutando, incluso si no crea un subproceso, habrá varios subprocesos en segundo plano, como el subproceso principal y el subproceso gc;
    • main () se llama hilo principal, que es el punto de entrada del sistema y se usa para ejecutar todo el programa
    • En un proceso, si se abren varios subprocesos, el planificador programará la ejecución de los subprocesos. El planificador está estrechamente relacionado con el sistema operativo y el orden no puede ser interferido por la intervención humana.
    • Cuando se opera con el mismo recurso, habrá problemas de apropiación de recursos y es necesario agregar control de simultaneidad.
    • Los subprocesos traerán una sobrecarga adicional, como el tiempo de programación de la CPU, la sobrecarga del control de simultaneidad
    • Cada subproceso interactúa en su propia memoria de trabajo. Un control inadecuado de la memoria causará inconsistencia en los datos.

    Llamadas a métodos comunes y subprocesos múltiples:

Inserte la descripción de la imagen aquí

  1. Método uno de creación de subprocesos: Threadclass hereda la clase Thread (énfasis)

    //创建线程方式一:继承Thread类,重写run方法,调用start开启线程
    
    //总结:注意,线程开启不一定立即执行,由CPU调度执行
    public class TestThread1 extends Thread{
          
          
        @Override
        public void run() {
          
          
            //run方法线程体
            for (int i = 0; i < 200; i++) {
          
          
                System.out.println("我在看代码--------"+i);
            }
        }
    
        public static void main(String[] args) {
          
          
            //main线程,主线程
            //创建一个多线程对象
            TestThread1 testThread1=new TestThread1();
    
            //调用start()方法开启线程
            testThread1.start();//start()是同时执行的
    
            for (int i = 0; i < 1000; i++) {
          
          
                System.out.println("我在学习多线程--"+i);
            }
        }
    }
    
    
  2. Descarga la foto y el hilo de contacto

    • Primero, descargue el paquete commons-io e importe el paquete jar en el proyecto. Para obtener más detalles, consulte la descarga del paquete Apache IO . Nuestro código debe usar el método copyURLToFile () de la clase FileUtils (copie una URL en un expediente).

    • Descubra la dirección de la imagen que desea descargar para facilitar la implementación de nuestro código.

Inserte la descripción de la imagen aquí

  • Implementación de código específico

    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    //练习Thread,实现多线程同步下载图片
    public class TestThread2 extends Thread {
          
          
        private String url;//网络图片地址
        private String name;//保存的文件名
    
        public TestThread2(String url,String name){
          
          
            this.url=url;
            this.name=name;
        }
    
        //下载图片的执行体
        @Override
        public void run() {
          
          
            WebDownloader webDownloader=new WebDownloader();
            webDownloader.downloader(url,name);
            System.out.println("下载了文件名为:"+name);
        }
    
        public static void main(String[] args) {
          
          
            TestThread2 t1=new TestThread2("https://img-blog.csdnimg.cn/20210316213155604.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h1bl9pbmRlcGVuZGVudA==,size_16,color_FFFFFF,t_70#pic_center","1.jpg");
            TestThread2 t2=new TestThread2("https://img-blog.csdnimg.cn/20210316213209625.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h1bl9pbmRlcGVuZGVudA==,size_16,color_FFFFFF,t_70#pic_center","2.jpg");
            TestThread2 t3=new TestThread2("https://img-blog.csdnimg.cn/20210316213228816.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h1bl9pbmRlcGVuZGVudA==,size_16,color_FFFFFF,t_70#pic_center","3.jpg");
    
            //先下载t1
            t1.start();
            //然后是t2
            t2.start();
            //最后是t3
            t3.start();
            //但是事实不是按顺序的,start()是同时进行的,谁先下载要取决于cpu的安排调度
        }
    }
    
    //下载器
    class WebDownloader{
          
          
        //下载方法
        public void downloader(String url,String name){
          
          
            try {
          
          
                //copyURLToFile()拷贝一个URL到文件
                FileUtils.copyURLToFile(new URL(url),new File(name));
            } catch (IOException e) {
          
          
                e.printStackTrace();
                System.out.println("IO异常,downloader方法出现问题");
            }
        }
    }
    
  • Imagen descargada con éxito

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Xun_independent/article/details/114938880
Recomendado
Clasificación