マルチスレッド-スレッドの作成(1)
-
プログラム:指示とデータの順序付けられたコレクションであり、操作上の意味はありません。衝撃的な概念です。
-
プロセス:プログラムを実行する実行プロセスであり、動的な概念であり、システムリソース割り当ての単位です。通常、プロセスには複数のスレッドを含めることができます。もちろん、プロセスには少なくとも1つのスレッドがあり、それ以外の場合は意味がありません。スレッドはCPUのスケジューリングと実行の単位です。
-
スレッド:スレッドは独立した実行パスです
- プログラムの実行中は、スレッドを作成しなくても、メインスレッドやgcスレッドなど、バックグラウンドに複数のスレッドがあります。
- main()はメインスレッドと呼ばれ、システムのエントリポイントであり、プログラム全体を実行するために使用されます。
- プロセスでは、複数のスレッドが開かれている場合、スレッドの実行はスケジューラーによってスケジュールされます。スケジューラーはオペレーティングシステムと密接に関連しており、人間の介入によって順序が妨げられることはありません。
- 同じリソースで操作する場合、リソースの取得に問題が発生するため、同時実行制御を追加する必要があります
- スレッドは、CPUスケジューリング時間、同時実行制御オーバーヘッドなどの追加のオーバーヘッドをもたらします
- 各スレッドは、独自の作業メモリー内で相互作用します。不適切なメモリー制御は、データの不整合を引き起こします。
一般的なメソッド呼び出しとマルチスレッド:
-
スレッド作成の方法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); } } }
-
写真をダウンロードしてスレッドに連絡してください
-
まず、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方法出现问题"); } } }
-
画像が正常にダウンロードされました