1. 程式人生 > 其它 >從零開始構建自己的一個網站:一:我們是如何訪問網站的

從零開始構建自己的一個網站:一:我們是如何訪問網站的

Process 和 Tread

建立多執行緒方法一

 1 package main.com;
 2 
 3 
 4 //建立程序方法一:繼承 Thread 類,重寫 run() 方法,呼叫 start() 方法開啟執行緒
 5 
 6 //總結:注意,執行緒開啟不一定立即執行由 CPU 排程執行
 7 public class TestThread1 extends Thread{
 8 
 9     @Override
10     public void run(){
11         //run 方法執行緒體
12         for (int i = 0; i < 20; i++) {
13 System.out.println("runing..." + i); 14 } 15 16 } 17 18 public static void main(String[] args) { 19 //main 執行緒,即主執行緒 20 21 TestThread1 tt1 = new TestThread1(); 22 //呼叫start() 方法開啟執行緒 23 tt1.start(); 24 25 for (int i = 0; i < 200; i++) {
26 System.out.println("main....." + i); 27 } 28 29 } 30 }

 實踐

 1 package com.xun;
 2 
 3 import org.apache.commons.io.FileUtils;
 4 
 5 import java.io.File;
 6 import java.io.IOException;
 7 import java.net.URL;
 8 
 9 //練習Thread,實現多執行緒同步下載圖片
10 public class TestThread2 extends
Thread{ 11 private String url; //網路圖片地址 12 private String name; //儲存的檔名 13 14 public TestThread2(String url,String name){ 15 this.url = url; 16 this.name = name; 17 } 18 19 @Override 20 public void run(){ 21 WebDownloder webDownloder = new WebDownloder(); 22 webDownloder.downloader(url,name); 23 System.out.println("下載檔名為"+name); 24 } 25 26 public static void main(String[] args) { 27 TestThread2 t1 = new TestThread2("http://www.ikuimg.com/img/pic/2203/1-220331105120-p9.jpg","1.jpg"); 28 TestThread2 t2 = new TestThread2("http://www.ikuimg.com/img/pic/2203/1-220331105121-p9.jpg","2.jpg"); 29 TestThread2 t3 = new TestThread2("http://www.ikuimg.com/img/pic/2203/1-220331105122-p9.jpg","3.jpg"); 30 31 t1.start(); 32 t2.start(); 33 t3.start(); 34 35 } 36 } 37 38 //下載器 39 class WebDownloder{ 40 public void downloader(String link, String name){ 41 try { 42 URL url = new URL(link); 43 //url.openConnection().setRequestProperty("User-Agent", "Mozilla/4.76"); 44 FileUtils.copyURLToFile(url,new File(name)); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 System.out.println("IO異常,downloder方法異常"); 48 } 49 } 50 }
同步下載圖片

建立多執行緒方法二:

 1 package com.xun;
 2 
 3 //建立執行緒方式2:實現 runable 介面,重寫run方法,實行執行緒需要丟入 runable 介面實現類,呼叫start 方法
 4 
 5 public class TestThread3 implements Runnable{
 6     @Override
 7     public void run(){
 8         //run 方法呼叫執行緒體
 9         for (int i = 0; i < 20; i++) {
10             System.out.println("runing...");
11         }
12     }
13 
14     public static void main(String[] args) {
15         //main 執行緒,即主執行緒
16 
17         TestThread3 tt3 = new TestThread3();
18 
19         //建立執行緒物件,通過執行緒物件來開啟我們的執行緒
20 //        Thread thread = new Thread(tt3);
21 //        tt3.start();
22 
23         new Thread(tt3).start();
24         for (int i = 0; i < 200; i++) {
25             System.out.println("main....." + i);
26         }
27 
28     }
29 }

小結:

  繼承Thread類:

    子類繼承Thread類具備多執行緒能力

    啟動執行緒:子類物件.start()

    不建議使用:避免OOP單繼承侷限性

  實現Runable介面

    實現介面Runable具有多執行緒能力

    啟動執行緒:傳入目標物件+Thread物件.start()

    推薦使用:避免單繼承侷限性,靈活方便,方便同一個物件被多個執行緒使用

   例項,初識併發

 1 package com.xun;
 2 
 3 //發現問題,多個執行緒操作同一個資源,執行緒不安全,資料紊亂,併發問題
 4 public class TestThread4 implements Runnable{
 5 
 6     private int ticketNums = 10; //票數
 7 
 8     @Override
 9     public void run(){
10         while(ticketNums>0){
11             try {
12                 Thread.sleep(200);
13             } catch (InterruptedException e) {
14                 e.printStackTrace();
15             }
16             System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNums--+"張票");
17         }
18     }
19 
20     public static void main(String[] args) {
21         TestThread4 tt4 = new TestThread4();
22 
23         new Thread(tt4,"張三").start();
24         new Thread(tt4,"李四").start();
25         new Thread(tt4,"王五").start();
26     }
27 }

   例項:龜兔賽跑,一個物件,多個執行緒使用

 1 package com.xun;
 2 
 3 //發現問題,多個執行緒操作同一個資源,執行緒不安全,資料紊亂,併發問題
 4 public class TestThread4 implements Runnable{
 5 
 6     private int ticketNums = 10; //票數
 7 
 8     @Override
 9     public void run(){
10         while(ticketNums>0){
11             try {
12                 Thread.sleep(200);
13             } catch (InterruptedException e) {
14                 e.printStackTrace();
15             }
16             System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNums--+"張票");
17         }
18     }
19 
20     public static void main(String[] args) {
21         TestThread4 tt4 = new TestThread4();
22 
23         new Thread(tt4,"張三").start();
24         new Thread(tt4,"李四").start();
25         new Thread(tt4,"王五").start();
26     }
27 }
View Code