導航:首頁 > 編程語言 > java多線程同時寫入數據到集合

java多線程同時寫入數據到集合

發布時間:2023-08-21 05:20:40

1. java 多線程 寫入資料庫 數據池

你這個首先得分開。
第一部分:你有很多線程在往數據池裡面寫入數據。那內么,你的線程只管寫容數據,不用理會其他的數據。
第二部分:你的另外的線程(這里可以用spring的job定時器啟動),這部分只管往資料庫寫入數據,至於寫入的條件,你可以判斷數據池的數據是否達到寫入的標准。這里的線程可以配置為啟動一次就一直運行,或者是隔多少秒繼續運行。這樣可以提高效率。
第三部分:數據池,這里的數據池一定要第一部分和第二部分的線程都能夠訪問,並且是唯一的。你可以寫一個公用的類來進行控制。
大致就是這樣的。

2. java多線程共同操作同一個隊列,怎麼實現

以下是兩個線程:

import java.util.*;

public class Thread_List_Operation {
//假設有這么一個隊列
static List list = new LinkedList();

public static void main(String[] args) {
Thread t;
t = new Thread(new T1());
t.start();
t = new Thread(new T2());
t.start();

}

}

//線程T1,用來給list添加新元素
class T1 implements Runnable{

void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "為隊列添加了一個元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}

}

}

//線程T2,用來給list添加新元素
class T2 implements Runnable{

void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "為隊列添加了一個元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}

}

}

//結果(亂序)
Thread-0為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-1為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素
Thread-0為隊列添加了一個元素

3. Java向線程傳遞數據的三種方法

在傳統的同步開發模式下 當我們調用一個函數時 通過這個函數的參數將數據傳入 並通過這個函數的返回值來返回最終的計算結果 但在多線程的非同步開發模式下 數據的傳遞和返回和同步開發模式有很大的區別 由於線程的運行和結束是不可預蘆遲料的 因此 在傳遞和返回數據時就無法象函數一樣通過函數參數和return語句來返回數據 本文就以上原因介紹了幾種用於向線程傳遞數據的方法 在下一篇文章中將介紹從線程中返回數據的方法

欲先取之 必先予之 一般在使用線程時都需要有一些初始化數據 然後線程利用這些數據進行加工處理 並返回結果 在這個過程中最先要做的就是向線程中傳遞數據

一 通過構造方法傳遞數據

在創建線程時 必須要建立一個Thread類的或其子類的實例 因此 我們不難想到在調用start方法之前通過線程類的構造方法將數據傳入線程 並將傳入的數據使用類變數保存起來 以便線程使用(其實就是在run方法中使用) 下面的代碼演示了如何通過構造方法來傳遞數據

package mythread;

public class MyThread extends Thread

{

private String name;

public MyThread (String name)

{

this name = name;

}

public void run()

{

System out println( hello + name);

}

public static void main(String[] args)

{

Thread thread = new MyThread ( world );

thread start();

}

}

由於這種方法是在創建線程對象的同時傳遞數據的 因此 在線程運行之前這些數據就就已經到位了 這樣就不會造成數據在線程運行後才傳入的現象 如果要傳遞更復雜的數據 可以使用集合 類等數據結構 使用構造方法來傳遞數據雖然比較安全 但如果要傳遞的數據比較多時 就會造成很多不便 由於Java沒有默認參數 要想實現類似默認參數的效果 就得使用重載 這樣不但使構造方法本身過於復雜 又會使構造方法在數量上大增 因此 要想避免這種情況 就得通過類方法或類變數來傳遞數據

二 通過變數和方法傳遞數據

向對象中傳入數據一般有兩次機會 第一次機會是在建立對象時通過構造方法將數據傳入 另外一次機會就是在類中定義一系列的public的方法或變數(也可稱之譽裂為欄位) 然後在建立完對象後 通過對象實例逐個賦值 下面的代碼是對MyThread 類的改版 使用了一個setName方法來設置name變數

package mythread;

public class MyThread implements Runnable

{

private String name;

public void setName(String name)

{

this name = name;

}

public void run()

{

System out println( hello + name);

}

public static void main(String[] args)

{

MyThread myThread = new MyThread ();

myThread setName( world );

Thread thread = new Thread(myThread);

thread start();

}

}

三 通過回調函數傳遞數據

上面討論的兩種向慶嘩閉線程中傳遞數據的方法是最常用的 但這兩種方法都是main方法中主動將數據傳入線程類的 這對於線程來說 是被動接收這些數據的 然而 在有些應用中需要在線程運行的過程中動態地獲取數據 如在下面代碼的run方法中產生了 個隨機數 然後通過Work類的process方法求這三個隨機數的和 並通過Data類的value將結果返回 從這個例子可以看出 在返回value之前 必須要得到三個隨機數 也就是說 這個value是無法事先就傳入線程類的

package mythread;

class Data

{

public int value = ;

}

class Work

{

public void process(Data data Integer numbers)

{

for (int n : numbers)

{

data value += n;

}

}

}

public class MyThread extends Thread

{

private Work work;

public MyThread (Work work)

{

this work = work;

}

public void run()

{

java util Random random = new java util Random();

Data data = new Data();

int n = random nextInt( );

int n = random nextInt( );

int n = random nextInt( );

work process(data n n n ); // 使用回調函數

System out println(String valueOf(n ) + + + String valueOf(n ) + +

+ String valueOf(n ) + = + data value);

}

public static void main(String[] args)

{

Thread thread = new MyThread (new Work());

thread start();

}

}

lishixin/Article/program/Java/hx/201311/26623

4. java中怎麼用多個線程同時對一個文件讀取,最終將文件內容保存到一個位元組數組中去呢

多線程復讀取文件在一塊硬碟上沒制用,瓶頸在硬碟I/O,而不在CPU和內存。讀取文件時,CPU不用復雜的計算工作,只是數據傳輸而已,多線程反而造成磁頭來回移動,效率不高。如果是兩塊以上的硬碟,可以用不同的線程訪問不同的硬碟,效率比單線程要高
而且多線程操作同一文件除了效率還會有多線程問題,多個線程同時往數組里存數據還會有線程安全問題,如果不同步處理讀取的文件就是錯誤的。
如果讀取的話只能設置每個線程各自讀取偏 移量
讀取文件大小(比如大小是200K)。 2,啟動5個線程,第一個線程讀到40,第二個線程跳過40在讀到80,總之得合理安排好各個線程讀取的大小。這樣才能不重復讀取。大數據處理框架maprece原理和此類似

5. Java 多線程處理一個List

多線程並發操作,
請使用Collections.synchronizedList(new LinkedList<String>());
這樣就是線程安全
另外LinkedList插入快內
再次就是啟動jvm的參數容設置
-Xms512m Xmx1024m

閱讀全文

與java多線程同時寫入數據到集合相關的資料

熱點內容
驅動程序順序安裝腳本 瀏覽:665
word文件里怎樣查重 瀏覽:219
mx5系統基帶版本 瀏覽:184
ntlea全域通win10 瀏覽:171
qq怎麼查看別人的收藏 瀏覽:135
地震三參數matlab程序 瀏覽:57
怎樣給優盤文件加密軟體 瀏覽:7
收拾文件有哪些小妙招 瀏覽:431
pdf文件去底網 瀏覽:253
win10重裝系統需要格式化c盤嗎 瀏覽:424
路由器trx文件 瀏覽:655
淘寶店鋪數據包怎麼做 瀏覽:195
win10鍵盤黏連 瀏覽:332
json如何生成表格 瀏覽:323
怎麼修復sql資料庫表 瀏覽:40
微信微博差別 瀏覽:163
簽到積分換禮品app 瀏覽:812
mfc最近打開文件 瀏覽:672
app埋點平台都有哪些app 瀏覽:314
瑞斯康達網路管理界面 瀏覽:254

友情鏈接