單線程與多線程的性能比較


記錄一下單線程與多線程處理性能的比較

1、單線程

 1 import java.util.LinkedList;
 2 
 3 public class TrainBooking2 {
 4 
 5     public static void main(String[] args) {
 6         long startTime = System.currentTimeMillis();
 7         LinkedList<Integer> tickets = new LinkedList<Integer>();
 8         for (int i = 0; i < 100; i++) {
 9             tickets.add(i);
10         }
11         new ABook(tickets, startTime).start();
12 
13     }
14 }
15 
16 
17 class ABook extends Thread {
18     private LinkedList<Integer> m_tickets;
19     private long m_startTime;
20 
21     public ABook(LinkedList<Integer> tickets, long startTime) {
22         m_startTime = startTime;
23         m_tickets = tickets;
24     }
25 
26     public void run() {
27         while (true) {
28             if (!booking(m_tickets)) {
29                 System.out.println("售票共用時:" + (System.currentTimeMillis() - m_startTime) / 1000 + "秒");
30                 break;
31             }
32         }
33     }
34 
35     private boolean booking(LinkedList<Integer> totalTickets) {
36         try {
37             Thread.sleep(200);
38         } catch (Exception e) {
39             e.printStackTrace();
40         }
41         synchronized (totalTickets) {
42             if (totalTickets.size() > 0) {
43                 totalTickets.removeLast();
44                 System.out.println("線程id" + Thread.currentThread().getId() + "售票一張,剩余電影票" + totalTickets.size() + "張");
45                 return true;
46             } else {
47                 System.out.println("線程id" + Thread.currentThread().getId() + "顯示票已售完");
48                 return false;
49             }
50         }
51     }
52 }

輸出:

線程id11售票一張,剩余電影票99張
線程id11售票一張,剩余電影票98張
線程id11售票一張,剩余電影票97張
線程id11售票一張,剩余電影票96張
線程id11售票一張,剩余電影票95張
線程id11售票一張,剩余電影票94張
線程id11售票一張,剩余電影票93張
線程id11售票一張,剩余電影票92張
線程id11售票一張,剩余電影票91張
線程id11售票一張,剩余電影票90張
線程id11售票一張,剩余電影票89張
線程id11售票一張,剩余電影票88張
線程id11售票一張,剩余電影票87張
線程id11售票一張,剩余電影票86張
線程id11售票一張,剩余電影票85張
線程id11售票一張,剩余電影票84張
線程id11售票一張,剩余電影票83張
線程id11售票一張,剩余電影票82張
線程id11售票一張,剩余電影票81張
線程id11售票一張,剩余電影票80張
線程id11售票一張,剩余電影票79張
線程id11售票一張,剩余電影票78張
線程id11售票一張,剩余電影票77張
線程id11售票一張,剩余電影票76張
線程id11售票一張,剩余電影票75張
線程id11售票一張,剩余電影票74張
線程id11售票一張,剩余電影票73張
線程id11售票一張,剩余電影票72張
線程id11售票一張,剩余電影票71張
線程id11售票一張,剩余電影票70張
線程id11售票一張,剩余電影票69張
線程id11售票一張,剩余電影票68張
線程id11售票一張,剩余電影票67張
線程id11售票一張,剩余電影票66張
線程id11售票一張,剩余電影票65張
線程id11售票一張,剩余電影票64張
線程id11售票一張,剩余電影票63張
線程id11售票一張,剩余電影票62張
線程id11售票一張,剩余電影票61張
線程id11售票一張,剩余電影票60張
線程id11售票一張,剩余電影票59張
線程id11售票一張,剩余電影票58張
線程id11售票一張,剩余電影票57張
線程id11售票一張,剩余電影票56張
線程id11售票一張,剩余電影票55張
線程id11售票一張,剩余電影票54張
線程id11售票一張,剩余電影票53張
線程id11售票一張,剩余電影票52張
線程id11售票一張,剩余電影票51張
線程id11售票一張,剩余電影票50張
線程id11售票一張,剩余電影票49張
線程id11售票一張,剩余電影票48張
線程id11售票一張,剩余電影票47張
線程id11售票一張,剩余電影票46張
線程id11售票一張,剩余電影票45張
線程id11售票一張,剩余電影票44張
線程id11售票一張,剩余電影票43張
線程id11售票一張,剩余電影票42張
線程id11售票一張,剩余電影票41張
線程id11售票一張,剩余電影票40張
線程id11售票一張,剩余電影票39張
線程id11售票一張,剩余電影票38張
線程id11售票一張,剩余電影票37張
線程id11售票一張,剩余電影票36張
線程id11售票一張,剩余電影票35張
線程id11售票一張,剩余電影票34張
線程id11售票一張,剩余電影票33張
線程id11售票一張,剩余電影票32張
線程id11售票一張,剩余電影票31張
線程id11售票一張,剩余電影票30張
線程id11售票一張,剩余電影票29張
線程id11售票一張,剩余電影票28張
線程id11售票一張,剩余電影票27張
線程id11售票一張,剩余電影票26張
線程id11售票一張,剩余電影票25張
線程id11售票一張,剩余電影票24張
線程id11售票一張,剩余電影票23張
線程id11售票一張,剩余電影票22張
線程id11售票一張,剩余電影票21張
線程id11售票一張,剩余電影票20張
線程id11售票一張,剩余電影票19張
線程id11售票一張,剩余電影票18張
線程id11售票一張,剩余電影票17張
線程id11售票一張,剩余電影票16張
線程id11售票一張,剩余電影票15張
線程id11售票一張,剩余電影票14張
線程id11售票一張,剩余電影票13張
線程id11售票一張,剩余電影票12張
線程id11售票一張,剩余電影票11張
線程id11售票一張,剩余電影票10張
線程id11售票一張,剩余電影票9張
線程id11售票一張,剩余電影票8張
線程id11售票一張,剩余電影票7張
線程id11售票一張,剩余電影票6張
線程id11售票一張,剩余電影票5張
線程id11售票一張,剩余電影票4張
線程id11售票一張,剩余電影票3張
線程id11售票一張,剩余電影票2張
線程id11售票一張,剩余電影票1張
線程id11售票一張,剩余電影票0張
線程id11顯示票已售完
售票共用時:20秒

2、多線程:

 1 import java.util.LinkedList;
 2 
 3 public class TrainBooking2 {
 4 
 5     public static void main(String[] args) {
 6         long startTime = System.currentTimeMillis();
 7         LinkedList<Integer> tickets = new LinkedList<Integer>();
 8         for (int i = 0; i < 100; i++) {
 9             tickets.add(i);
10         }
11 
12         new ABook(tickets, startTime).start();
13         new ABook(tickets, startTime).start();
14         new ABook(tickets, startTime).start();
15 
16     }
17 }
18 
19 
20 class ABook extends Thread {
21     private LinkedList<Integer> m_tickets;
22     private long m_startTime;
23 
24     public ABook(LinkedList<Integer> tickets, long startTime) {
25         m_startTime = startTime;
26         m_tickets = tickets;
27     }
28 
29     public void run() {
30         while (true) {
31             if (!booking(m_tickets)) {
32                 System.out.println("售票共用時:" + (System.currentTimeMillis() - m_startTime) / 1000 + "秒");
33                 break;
34             }
35         }
36     }
37 
38     private boolean booking(LinkedList<Integer> totalTickets) {
39         try {
40             Thread.sleep(200);
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44         synchronized (totalTickets) {
45             if (totalTickets.size() > 0) {
46                 totalTickets.removeLast();
47                 System.out.println("線程id" + Thread.currentThread().getId() + "售票一張,剩余電影票" + totalTickets.size() + "張");
48                 return true;
49             } else {
50                 System.out.println("線程id" + Thread.currentThread().getId() + "顯示票已售完");
51                 return false;
52             }
53         }
54     }
55 }

輸出:

線程id11售票一張,剩余電影票99張
線程id13售票一張,剩余電影票98張
線程id12售票一張,剩余電影票97張
線程id12售票一張,剩余電影票96張
線程id11售票一張,剩余電影票95張
線程id13售票一張,剩余電影票94張
線程id11售票一張,剩余電影票93張
線程id12售票一張,剩余電影票92張
線程id13售票一張,剩余電影票91張
線程id11售票一張,剩余電影票90張
線程id12售票一張,剩余電影票89張
線程id13售票一張,剩余電影票88張
線程id11售票一張,剩余電影票87張
線程id12售票一張,剩余電影票86張
線程id13售票一張,剩余電影票85張
線程id11售票一張,剩余電影票84張
線程id12售票一張,剩余電影票83張
線程id13售票一張,剩余電影票82張
線程id12售票一張,剩余電影票81張
線程id13售票一張,剩余電影票80張
線程id11售票一張,剩余電影票79張
線程id13售票一張,剩余電影票78張
線程id11售票一張,剩余電影票77張
線程id12售票一張,剩余電影票76張
線程id13售票一張,剩余電影票75張
線程id11售票一張,剩余電影票74張
線程id12售票一張,剩余電影票73張
線程id12售票一張,剩余電影票72張
線程id13售票一張,剩余電影票71張
線程id11售票一張,剩余電影票70張
線程id11售票一張,剩余電影票69張
線程id13售票一張,剩余電影票68張
線程id12售票一張,剩余電影票67張
線程id11售票一張,剩余電影票66張
線程id13售票一張,剩余電影票65張
線程id12售票一張,剩余電影票64張
線程id11售票一張,剩余電影票63張
線程id12售票一張,剩余電影票62張
線程id13售票一張,剩余電影票61張
線程id12售票一張,剩余電影票60張
線程id11售票一張,剩余電影票59張
線程id13售票一張,剩余電影票58張
線程id12售票一張,剩余電影票57張
線程id13售票一張,剩余電影票56張
線程id11售票一張,剩余電影票55張
線程id11售票一張,剩余電影票54張
線程id13售票一張,剩余電影票53張
線程id12售票一張,剩余電影票52張
線程id13售票一張,剩余電影票51張
線程id12售票一張,剩余電影票50張
線程id11售票一張,剩余電影票49張
線程id13售票一張,剩余電影票48張
線程id11售票一張,剩余電影票47張
線程id12售票一張,剩余電影票46張
線程id13售票一張,剩余電影票45張
線程id12售票一張,剩余電影票44張
線程id11售票一張,剩余電影票43張
線程id13售票一張,剩余電影票42張
線程id12售票一張,剩余電影票41張
線程id11售票一張,剩余電影票40張
線程id13售票一張,剩余電影票39張
線程id12售票一張,剩余電影票38張
線程id11售票一張,剩余電影票37張
線程id13售票一張,剩余電影票36張
線程id11售票一張,剩余電影票35張
線程id12售票一張,剩余電影票34張
線程id13售票一張,剩余電影票33張
線程id12售票一張,剩余電影票32張
線程id11售票一張,剩余電影票31張
線程id13售票一張,剩余電影票30張
線程id11售票一張,剩余電影票29張
線程id12售票一張,剩余電影票28張
線程id13售票一張,剩余電影票27張
線程id11售票一張,剩余電影票26張
線程id12售票一張,剩余電影票25張
線程id13售票一張,剩余電影票24張
線程id12售票一張,剩余電影票23張
線程id11售票一張,剩余電影票22張
線程id13售票一張,剩余電影票21張
線程id11售票一張,剩余電影票20張
線程id12售票一張,剩余電影票19張
線程id13售票一張,剩余電影票18張
線程id12售票一張,剩余電影票17張
線程id11售票一張,剩余電影票16張
線程id13售票一張,剩余電影票15張
線程id11售票一張,剩余電影票14張
線程id12售票一張,剩余電影票13張
線程id13售票一張,剩余電影票12張
線程id11售票一張,剩余電影票11張
線程id12售票一張,剩余電影票10張
線程id13售票一張,剩余電影票9張
線程id11售票一張,剩余電影票8張
線程id12售票一張,剩余電影票7張
線程id13售票一張,剩余電影票6張
線程id11售票一張,剩余電影票5張
線程id12售票一張,剩余電影票4張
線程id13售票一張,剩余電影票3張
線程id12售票一張,剩余電影票2張
線程id11售票一張,剩余電影票1張
線程id13售票一張,剩余電影票0張
線程id12顯示票已售完
售票共用時:6秒
線程id11顯示票已售完
售票共用時:6秒
線程id13顯示票已售完
售票共用時:7秒

顯示多線程與單線程相比,性能占優,但由於CPU分片問題,所以線程不可能無限增加。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM