Moj khaum diav rawg los sib sau nyob rau hauv java no li cas 7.0 (Lub cajmeem rau thaum uas tig mus)?

Diav rawg/txis moj khaum muaj tau nkag tau rau hauv java 7 yuav kom daws tau tej teeb meem multi-threading/mus tib seem programming.

Nws yuav nyuaj rau koj kam nrog txhawb (mus tib seem) programming thaum uas siv cov kev cai. Vim hais tias koj yuav tsum hais rau xov synchronization, ceeb toom, sib sau thiab lwm yam thiab tseem tus pitfalls ntawm kev sib pab. yog duas lus txhawb txhawb programming rau lub Java platform heev li proven ntawm kev nyob hauv cov zej zog sib txawv. Cov zej zos tag sim muab cov qauv qhia ntawv programming thiab implementations npaum ntawd abstracts lub ntsiab lus mob mob muaj txuj kev ncau ntau threaded thiab distributed daim ntaub ntawv. Java Platform, Txheem tsab (Java SE) 5 thiab ces Java SE 6 tswvcuab tej pob khoom txheej (Executor pab)muab haib concurrency building blocks. Java SE 7 enhanced lub moj khaum muab kev txhawb ntxiv rau parallelism ntxiv.

Diav rawg/txuas yog lub tswvyim tshiab nyob rau hauv java 7.0 Version. Lub hom phiaj yooj yim ntawm no lub moj khaum yog tsom qhov chaw nyob hauv daim ntaub ntawv java multithreading. Lub finer ces lub moj khaum executor pab yog moj khaum diav rawg/sib sau. Nws yuav siv sij hawm qhov zoo ntawm cov ua hwj huam thiab li daim ntawv thov tau kev pab thiab ua charge. Nws yog ib qho yuav ua raws li tus ExecutorService interface uas yuav pab koj mus kom zoo dua ntau processors. Nws yog tsim rau tej hauj lwm uas tau raug liam sim ua tej daim me recursively thiab li ua AUTHORIZED sai.

Zoo li ExecutorService, lub moj khaum diav rawg los sib sau thiab distributes paub tab rau cov neeg ua hauj lwm threads hauv xov pas dej ua ke. Tiam sis qhov txawv lub ntsiab yog tias lub moj khaum diav rawg/txuas siv algorithm nyiag ua hauj lwm. Nov cov threads neeg ua hauj lwm uas tsis muaj tej yam ua yuav nyiag kev paub tab ntawm lwm threads no tibneeg hu tauj coob tseem. Tus ForkJoinPoolclass no mus ntxiv ntawm AbstractExecutorService thiab hauv plawv lub moj khaum. ForkJoinPool implements cov ntxhais nyiag ua algorithm thiab executes ForkJoinTasks.
Tam sim no cia kuv muab ib qho piv txwv yuav to taub hauv lus.

Cov kauj ruam uas yooj yim yog
· Phua ua hauj lwm
· Cob rau tus muaj threads
· Tom qab tau tiav koom lub chunks thiab muab nws ua

Peb muab ib daim ntawv uas yuav muaj coob tus zauv generated at random.

Kawm no yog uas qhia nws yog tshuaj Hmoob txoj kev ua hauj lwm.

package javablog.levent.com;
import java.util.Random;
// This class defins a list which will contain large number of integers.
public class LargeInteger {
private final int[] list = new int[2000000];
public largeInteger() {
Random generator = new Random(19580427);
for (int i = 0; i < list.length; i++) {
list[i] = generator.nextInt(500000);
}
}
public int[] getList() {
return list;
}
}

Tam sim no rau cov hoob kawm SplitTask hauv qab no ua hauj lwm split thiab sib sau.

package javablog.levent.com;
import java.util.Arrays;
import jsr166y.forkjoin.RecursiveAction;
public class SplitTask extends RecursiveAction {
private int[] list;
public long result;
public SplitTask(int[] array) {
this.list = array;
}

@Override
tiv thaiv tsis muaj dabtsis laij() {
Yog hais tias (list.length == 1) {
ntog = sau[0];
} ntxiv {
rau cov menyuam nta = list.length / 2;
rau cov menyuam[] l1 = Arrays.copyOfRange(sau, 0, nta);
rau cov menyuam[] l2 = Arrays.copyOfRange(sau, nta, list.length);
SplitTask s1 = SplitTask tshiab(l1);
SplitTask s2 = SplitTask tshiab(l2);
forkJoin(s1, s2);
ntog = s1.result + s2.result;
}
}
}

Cov chav kawm ntawv tag los yog kuaj cov txheej txheem. Nws yog invoking tus pas ForkJoinExecutor ua hauj lwm.

package javablog.levent.com;
import jsr166y.forkjoin.ForkJoinExecutor;
import jsr166y.forkjoin.ForkJoinPool;
import javablog.levent.com.SplitTask;
public class TestForkJoin {
public static void main(String[] args) {
LargeInteger test = new LargeInteger();
// Check the number of available processors
int nThreads = Runtime.getRuntime().availableProcessors();
System.out.println(nThreads);
SplitTask mfj = new SplitTask(test.getList());
ForkJoinExecutor pool = new ForkJoinPool(nThreads);
pool.invoke(mfj);
long result = mfj.getResult();
System.out.println("Done. Result: " + result);

}
}

============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share