運用ForkJoin多執行緒框架實現歸併排序
public class MergeSort {
23 /**
4 * 原地歸併排序(每次只將陣列分為大和小兩部分,並不是完全排序完成。需要遞迴)
5 *
6 * @param arr
7 * @param lo
8 * @param mid
9 * @param hi
10 */
11 public void merge(int[] arr, int lo, int mid, int hi) {
12 //1.複製陣列
13 int i = lo;
14int j = mid + 1;15
int[] temp = new int[arr.length];
16 for (int k = lo; k <= hi; k++) {
17 temp[k] = arr[k];
18 }
19 //2.移動指標進行排序(4種情況)
20 for (int k = lo; k <= hi; k++) {
21 if (i > mid) {//2.1 左邊用盡
22 arr[k] = temp[j++];
23 } else if (j > hi) {//2.2 右邊用盡
24 arr[k] = temp[i++];
25 } else if (temp[j] < temp[i]) {//2.3 左邊大於右邊
26 arr[k] = temp[j++];
27 } else {//2.4 右邊大於左邊
28 arr[k] = temp[i++];
29 }
3031 }
32 }
3334 /**
35 * 遞迴進行歸併排序
36 *
37 * @param arr
38 */
39 public void sort(int[] arr) {
40 sort(arr, 0, arr.length - 1);
41 }
4243 public void sort(int[] arr, int lo, int hi) {
44 if (hi <= lo) return;
45 int mid = lo + (hi - lo) / 2;
46 sort(arr,lo,mid);//左半邊排序
47 sort(arr,mid+1,hi);//右半邊排序
48 merge(arr,lo,mid,hi);//歸併
49 }
505152 // 生成一個數量為MAX的隨機整數集合,準備計算資料
53 private static int MAX = 100000;//100000個數進行排序
54 private static int[] inits = new int[MAX];
55 static {
56 Random r = new Random();
相關推薦
運用ForkJoin多執行緒框架實現歸併排序
一、普通歸併排序 1public class MergeSort {23 /**4 * 原地歸併排序(每次只將陣列分為大和小兩部分,並不是完全排序完成。需要遞迴)5
ucontext實現的使用者級多執行緒框架2(搶先式多執行緒)
#include "uthread.h"#include <assert.h>#include <stdlib.h>#include <time.h>ucontext_t Scheduler::ucontext;char Scheduler::stack[4096];u
【精】【多執行緒】ListenableFuture非同步多執行緒查詢實現
業務場景:為優化查詢效率,將原有查詢的條件做成單獨的索引表,每次產生記錄就會同步到索引表中,每次查詢索引表,根據索引便利的條件欄位再分別查詢每張子表的內容,最後封裝成前臺要的實體類。這裡面涉及到非同步查詢,如何保證一條記錄下的子表全部都查出來後才執行下面的操作。 下面Demo簡
如何實現多執行緒?實現多執行緒為什麼要調start,而不是run方法?(繼承Thread類、實現Ruable介面、Callable<V>)
什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較:
多執行緒之間實現同步
為什麼有執行緒安全問題 當多個執行緒同時共享同一個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。 什麼是多執行緒之間同步 當多個執行緒共享同一個資源,不會受到其他執行緒的干擾。 需求說明:2個視窗同時賣100張火車票問題
多執行緒 -- 多執行緒的實現
多執行緒----程序與執行緒 概念及二者區別與聯絡 多執行緒的實現 繼承Thread類實現多執行緒 實現Runnable介面來實現多執行緒 Thread與Runnable關係
多執行緒模擬實現生產者/消費者模型
多執行緒模擬實現生產者/消費者模型 package com.chow.queue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java
多執行緒的實現方法
Java提供了三種實現同步機制的方法: (1)synchronized 關鍵字 Java語言中,每個物件都有一個物件鎖與之關聯,該鎖表明物件在任何時候只允許被一個執行緒所擁有,當一個執行緒呼叫一段synchronized程式碼時,需要先獲取這個鎖,然後去執行相應的程式碼,
Executor多執行緒框架使用
在我們的JDK1.5的時候JAVA推出一款為了更加方便開發的多執行緒應用而封裝的框架(Executor),相比傳統的Thread類,Executor更加的方便,效能好,更易於管理,而且支援執行緒池。一般在開發爬蟲的時候為了提供爬蟲的效率,需要使用多執行緒,而Executor就是一個非常不錯的選擇。 常用介面
整合jdk的多執行緒框架用spring管理
一,spring配置thread檔案 可以將這塊配置單獨寫成applicationContext-thread.xml引入 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http:/
【Dr.Chen的系列問題】Java多執行緒的實現操作
一、什麼是多執行緒? 多執行緒(英語:multithreading),是指從軟體或者硬體上實現多個執行緒併發執行的技術。具有多執行緒能力的計算機因有硬體支援而能夠在同一時間執行多於一個執行緒,進而提升整體處理效能。具有這種能力的系統包括對稱多處理機、多核心處理器以及晶片級多
多執行緒的實現方式
多執行緒是指 一個程式執行時,產生或使用了不止一個執行緒。 執行緒的生命週期是怎麼樣的,下面這張圖我們可以看出些端倪: 這章我們主要討論多執行緒實現的方式,基礎知識部分我們可以下來再惡補。 方法一:Runnable 介面實現: 繼承介面,實現業務邏輯: public class WorkRunn
多執行緒程式設計實現Callable
方法描述: 1、Callable最重要的兩個優點:可以獲取返回值、丟擲異常 2、執行緒實現 2.1、定義執行緒實現Callable方法,並設定返回的資料型別,如:Callable<List<
多執行緒之間實現通訊
什麼是多執行緒之間通訊? 多執行緒之間通訊,其實就是多個執行緒在操作同一個資源,但是操作的動作不同。 多執行緒之間通訊需求 需求:第一個執行緒寫入(input)使用者,另一個執行緒取讀取(out)使用者.實現讀一個,寫一個操作。 共享資源源實體類 class
類的多執行緒下實現單例類
這兩天在看自己之前寫的程式碼,所以正好把用過的東西整理一下,單例模式,在日常的程式碼工作中也是經常被用到, 所以這裡把之前用過的不同方式實現的單例方式整理一下
分散式多執行緒同步實現
簡介:多執行緒請求同一個資源,導致併發問題,在不使用第三方外掛的情況下,用程式碼實現同步,初步程式碼如下,如果有什麼建議和意見,請留言,大家一起學習! 原理:多個伺服器中,選一臺伺服器作為中介,然後在各個伺服器同時爭搶同一個資源時候,都跳轉到中介的伺服器裡,然後在中介伺服器
多執行緒 -- 多執行緒的實現
概念及二者區別與聯絡 程序就是作業系統中一個程式的執行週期 執行緒:一個程式同時執行多個任務;通常來講,每一個任務就稱為一個執行緒 建立,撤銷一個執行緒比啟動,撤銷一個程序開銷要小得多 一個程序中所有的執行緒共享該程序的所有資源 沒有程序就沒有執行
Java多執行緒的實現(程序與執行緒的概念、Java繼承Thread類實現多執行緒、Java實現Runnable介面實現多執行緒、Thread與Runnable的區別、實現Callable介面實現多執行緒)
1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序? 程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序) 多程序: 同一時刻跑多個程式。 在DOS(磁碟作業系統時
java多執行緒的實現方式總結
一個專案所用的技術往往是由業務所驅動的,平常我們寫的最多的是業務的CRUD,這是一個普遍的現象,要想往上提升,往往繞不開多執行緒知識,這篇文章是LZ對多執行緒實現的一些看法 多執行緒的三種實現方式 目前多執行緒的實現方式有三種,讓我帶您一一看來 繼承Thre
C++ 多執行緒框架 (2):Mutex 互斥和 Sem 訊號量
互斥和訊號量是多執行緒程式設計的兩個基礎,其原理就不詳細說了,大家去看看作業系統的書或者網上查查吧。 對於互斥的實現,無論什麼作業系統都離不開三個步驟 1.初始化互斥鎖 2.鎖操作 3.解鎖操作 對於不同的系統只是實現的函式有一些不同而已,但是功能其實都大同小異,在