程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 多個線程模擬多人同時插入操作,多個線程模擬插入

多個線程模擬多人同時插入操作,多個線程模擬插入

編輯:JAVA綜合教程

多個線程模擬多人同時插入操作,多個線程模擬插入


 1 import java.util.concurrent.ConcurrentLinkedQueue;
 2  
 3 public class BeanOne extends Thread {
 4  
 5     public static ConcurrentLinkedQueue<String> list = new ConcurrentLinkedQueue<String>();// 定義公共的list
 6                                                                                             // 此處使用ConcurrentLinkedQueue為線程安全隊列
 7  
 8     public void run() {
 9         while (true) {
10             String str = list.poll();// 每次彈出一個元素遵循先入先出的原則
11             System.out.println(str);
12  
13         }
14     }
15  
16 }
 1 public class ThreadA extends Thread {
 2     private String str;
 3  
 4     public ThreadA(String str) {
 5         this.str = str;
 6     }
 7  
 8     public void run() {
 9         int i = 1;
10         while (true) { // 模擬插入操作,此處為死循環每開啟一個線程則認為一個人在做插入操作
11             try {
12                 BeanOne.list.add(str + i);// 寫入ConcurrentLinkedQueue(線程安全的隊列可以支持多線程)
13             } catch (Exception e) {
14                 e.printStackTrace();
15             }
16             i++;
17         }
18     }
19  
20 }
 1 public class Main {
 2  
 3     public static void main(String[] args) {
 4  
 5         // TODO Auto-generated method stub
 6         for (int i = 0; i < 3; i++)// 開啟多線程模擬多人同時操作
 7         {
 8             ThreadA threadA = new ThreadA(null);
 9             if (i == 0) {
10                 threadA = new ThreadA("ThreadA");
11             }
12             if (i == 1) {
13                 threadA = new ThreadA("ThreadB");
14             }
15             if (i == 2) {
16                 threadA = new ThreadA("ThreadC");
17             }
18             threadA.start();
19  
20         }
21         BeanOne threadB = new BeanOne();// 啟動輸出線程
22         threadB.start();
23  
24     }
25  
26 }

首先呢,問題是這樣的:

  遇到了一種情況,服務器比較小,壓力有點大,同時呢又有很多人進行大量的訂單操作,

 這個時候,就會出現,漏掉一部分人的請求,顯示的是超時。

  

  於是,就先將一定時間內的提交人的訂單存起來,然後循環遍歷這個集合,進行多線程插入,

 這樣應該就不會漏掉一部分了,當然這種方法肯定有弊端,歡迎給為指點。

 

 

http://www.xiaosen.win

 

 

感謝http://zhidao.baidu.com/business/profile?id=10287的解法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved