併發分發處理實踐

2021-09-02 12:19:06 字數 1558 閱讀 2435

// 並行***個執行緒直接進行送分

public void concurrentaddpoint(listdetailslist,liststatlist, int addsum) else

concurrentjob job = new concurrentjob(l,statlist);

exe.fork(job);// 派發任務

}// 彙總任務結果

int result = (integer) exe.join();

logger.info("concurrentadding result:"+result);

logger.info("concurrentadding info: totalsize[ " + totalsize + " ], threadsize[ " + concurrentsize + " ], addsum[ " + addsum + " ]");

logger.info("concurrentadding cost time: " + (system.currenttimemillis() - time));

exe.shutdown();

}class concurrentjob extends job

public object execute() catch (exception e)

logger.info("concurrentaddpoint thread = " + thread.currentthread().getname() + " | size: " + detailslist.size() + " | time: " + (system.currenttimemillis() - time));

return 1;}}

static class executer

public executer(int threadpoolsize)

/*** 任務派發

* * @param job

*/public void fork(job job)

}/**

* 統計任務結果

*/public int join() catch (interruptedexception e) }}

int result = 0;

// 取出每個任務的處理結果,彙總後返回

for (future<?> future : futres) catch (exception e)

}return result;

}public void shutdown()

}static abstract class job implements callable

public object call() throws exception catch (exception e)

synchronized (lock)

return result;

}/**

* 業務處理函式

*/public abstract object execute();

}static class lock

golang 併發實踐

golang 高併發主要是依靠sync包下的api實現,首先就是waitgroup 先說說waitgroup的用途 它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。waitgroup總共有三個方法 add delta int done wa...

Go併發程式設計實踐

併發程式設計一直是golang區別與其他語言的很大優勢,也是實際工作場景中經常遇到的。近日筆者在組內分享了我們常見的併發場景,及 示例,以期望大家能在遇到相同場景下,能快速的想到解決方案,或者是拿這些方案與自己實現的比較,取長補短。現整理出來與大家共享。回到頂部 很多時候,我們只想併發的做一件事情,...

java併發程式設計實踐

chapter 2 執行緒安全 常見的競爭條件包括檢查在執行,讀 改 寫.典型的檢查再執行操作為延遲初始化 if is null then.典型的讀 改 寫操作為自增運算 x 動態同步方法鎖住當前物件本身,靜態同步方法鎖住class物件 chapter 2 可見性 讀讀不需要同步,讀寫,寫寫需要.當...