㈠ java大數據 多線程寫文件
1、採用public static的變數存儲這一數值,每個線程都往這一共有靜態變數里寫入已復制大小。 2、採用Callable方式實現多線程,將結果作為返回值返回到主線程。這一方法只能在所有子線程都完成之後才能通過future獲取。
㈡ java多線程讀寫文件
public static void main(String[] args) {
File data = new File("data.txt");
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(
data), "UTF-8");
final BufferedReader bufferedReader = new BufferedReader(read);
for (int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
String lineTXT = null;
synchronized (bufferedReader) {
try {
while ((lineTXT = bufferedReader.readLine()) != null) {
System.out.println(Thread.currentThread()+":"+lineTXT);
bufferedReader.notify();
bufferedReader.wait();
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
bufferedReader.notifyAll();
}
}
}
}).start();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
㈢ 某公司面試題java11使用並發多線程加速下載文件,如何寫
先建一個用於下載文件的多線程類,通常要指明下載文件的位置(URL)和文件名以及保存到本地的路徑
public class FileDownloader implements Runnable
{
private static File file;//要下載的文件
private static String url;//文件所在URL
private static File storagePath;//保存路徑
public static void initialize(File file, String url, File storagePath)//初始化靜態欄位,初始化的代碼不用我寫吧
}
然後,指明同步塊,目的是讓各個線程共享一個文件資源,那樣它們可以知道同一個文件的下載狀況(即獲取其他線程下載文件到哪個位置,以防重復下載)
public synchronized void fileDownload()//此方法用於下載文件,一般的Java程序員都會寫,實在不會我可以幫你補上
或者
public void fileDownload(){
synchronized(file){
synchronized(url){
synchronized(storagePath){
}}}}//給每個欄位加上同步塊
run()方法的實現就以自己的喜好去寫吧,只要裡面調用了fileDownload()方法就行。
public void run(){
…
fileDownload();//下載文件
…
}
然後,在主類的main方法中創建一個多線程數組:
Runnable[] fds=new FileDownloader[線程數量];//fds為file_downloaders縮寫
Thread[] threads=new Thread[線程數量];
最後使用循環把所有的線程逐一啟動。
for(int i=0;i<線程數量;i++){
threads[i]=new Thread(fds[i]);
threads[i].start();
}