マルチスレッド-スレッドの作成(1)

マルチスレッド-スレッドの作成(1)

  1. プログラム:指示とデータの順序付けられたコレクションであり、操作上の意味はありません。衝撃的な概念です。

  2. プロセス:プログラムを実行する実行プロセスであり、動的な概念であり、システムリソース割り当ての単位です。通常、プロセスには複数のスレッドを含めることができます。もちろん、プロセスには少なくとも1つのスレッドがあり、それ以外の場合は意味がありません。スレッドはCPUのスケジューリングと実行の単位です。

  3. スレッド:スレッドは独立した実行パスです

    • プログラムの実行中は、スレッドを作成しなくても、メインスレッドやgcスレッドなど、バックグラウンドに複数のスレッドがあります。
    • main()はメインスレッドと呼ばれ、システムのエントリポイントであり、プログラム全体を実行するために使用されます。
    • プロセスでは、複数のスレッドが開かれている場合、スレッドの実行はスケジューラーによってスケジュールされます。スケジューラーはオペレーティングシステムと密接に関連しており、人間の介入によって順序が妨げられることはありません。
    • 同じリソースで操作する場合、リソースの取得に問題が発生するため、同時実行制御を追加する必要があります
    • スレッドは、CPUスケジューリング時間、同時実行制御オーバーヘッドなどの追加のオーバーヘッドをもたらします
    • 各スレッドは、独自の作業メモリー内で相互作用します。不適切なメモリー制御は、データの不整合を引き起こします。

    一般的なメソッド呼び出しとマルチスレッド:

ここに画像の説明を挿入します

  1. スレッド作成の方法1:ThreadclassはThreadクラスを継承します(強調)

    //创建线程方式一:继承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. 写真をダウンロードしてスレッドに連絡してください

    • まず、commons-ioパッケージをダウンロードし、jarパッケージをプロジェクトにインポートします。詳細については、Apache IOパッケージのダウンロードを参照しください。コードでは、FileUtilsクラスのcopyURLToFile()メソッドを使用する必要があります(URLをファイル)。

    • コードの実装を容易にするために、ダウンロードする画像のアドレスを見つけてください。

ここに画像の説明を挿入します

  • 特定のコードの実装

    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方法出现问题");
            }
        }
    }
    
  • 画像が正常にダウンロードされました

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Xun_independent/article/details/114938880