一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程

詳解Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程

2020-09-02 10:12關(guān)瑋琳linSir Java教程

這篇文章主要介紹了Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程,ExecutorService可以維護(hù)我們的大量線程在操作臨界資源時(shí)的穩(wěn)定性。

自從java1.5以后,官網(wǎng)就推出了executor這樣一個(gè)類,這個(gè)類,可以維護(hù)我們的大量線程在操作臨界資源時(shí)的穩(wěn)定性。
先上一段代碼吧:

testrunnable.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class testrunnable implements runnable {
  private string name;
 
  public testrunnable(string name) {
    this.name = name;
  }
 
  @override
  public void run() {
    while (true) {
      if (main.surplus < 0)
        return;
      main.surplus--;
      system.out.println(name + " " + main.surplus);
    }
  }
}

main入口

?
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(string[] args) {
 
     testrunnable runnable = new testrunnable("runnable1");
     testrunnable runnable2 = new testrunnable("runnable2");
 
     thread t1 = new thread(runnable);
     thread t2 = new thread(runnable2);
 
     t1.start();
     t2.start();
 
  }

詳解Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程

這樣,我們就看到了,數(shù)據(jù)肯定是亂了的,當(dāng)然這個(gè)時(shí)候我們可以加上一個(gè)synchronized的關(guān)鍵字,但是這樣也會出現(xiàn)點(diǎn)小問題的

詳解Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程

下面我打算采用一種java內(nèi)置的線程管理的機(jī)制,來解決這個(gè)問題,解決這個(gè)問題的思路大概就是,我們維護(hù)了一個(gè)線程池,當(dāng)有請求操作的時(shí)候統(tǒng)統(tǒng)進(jìn)入線程池,并且我們只開了一個(gè)線程,可以讓請求順序執(zhí)行,順序調(diào)用臨界資源,就很安全了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.concurrent.callable;
import java.util.concurrent.executionexception;
import java.util.concurrent.executorservice;
import java.util.concurrent.executors;
import java.util.concurrent.future;
 
public class main {
  public static int surplus = 10;
 
  private executorservice executor = executors.newsinglethreadexecutor();
 
  void addtask(runnable runnable) {
    executor.execute(runnable);
  }
 
  <v> v addtask(callable<v> callable) {
    future<v> submit = executor.submit(callable);
    try {
      return submit.get();
    } catch (interruptedexception e) {
      system.out.println("interruptedexception" + e.tostring());
    } catch (executionexception e) {
      system.out.println("executionexception" + e.tostring());
    }
    return null;
  }
 
  public void testaddtask(string name) {
    addtask(new runnable() {
      @override
      public void run() {
        for (int i = 0; i < 3; i++) {
          if (main.surplus <= 0)
            return;
          main.surplus--;
          system.out.println(name + " " + main.surplus);
        }
 
      }
    });
  }
 
  public void testaddtask2(string name) {
    int count = addtask(new callable<integer>() {
      @override
      public integer call() throws exception {
        for (int i = 0; i < 3; i++) {
          if (main.surplus <= 0)
            return 0;
          main.surplus--;
          system.out.println(name + " " + main.surplus);
        }
        return main.surplus;
      }
    });
 
  }
 
  public void close() {
    executor.shutdown();
  }
 
  public static void main(string[] args) {
    main main = new main();
    main.testaddtask("task1");
    main.testaddtask2("task2");
    main.testaddtask("task3");
    main.testaddtask2("task4");
    main.close();
  }
}

在這里,我們定義了兩種方法,分別是addtask,具有泛型的addtask,這兩種方法實(shí)現(xiàn)原理都是一樣的,其中一個(gè)是有回調(diào)的,一個(gè)是沒有回調(diào)的,就看項(xiàng)目需求了吧。

詳解Java利用ExecutorService實(shí)現(xiàn)同步執(zhí)行大量線程

然后分別調(diào)用這兩個(gè)方法咯,就可以看到結(jié)果是非常有序,且不會混亂的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.jianshu.com/p/ccdb616723ab

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: ssni-497新任美脚女教师 | 草莓在深夜释放自己软件 | caoporn超碰最新地址进入 | 国产成人在线免费视频 | 亚洲国产成人在人网站天堂 | 九九热在线视频观看这里只有精品 | 肉文小说 | 公园暴露娇妻小说 | 国产精品美女久久久久网站 | 日本不卡一区二区三区在线观看 | 白丝vk丨tk失禁 | 亚洲AVAV天堂AV在线网爱情 | 激情影院网站 | 久久国产伦子伦精品 | 非洲黑人gay巨大 | 国产老村长足疗店对白 | 洗濯屋动漫在线观看 | 成年女人毛片免费观看97 | 免费观看小视频 | 国产精选之刘婷野战 | 国产一二三区视频 | 呜嗯啊野战h呻吟男男双性 污小说在线阅读 | 国产亚洲精品精品国产亚洲综合 | caoporm碰最新免费公开视频 | 人妖三级| 成人高清视频在线观看 | 日本黄色高清视频网站 | 和岳m的小说| 亚洲 欧美 制服 校园 动漫 | 国产一卡二卡3卡4卡更新 | 国产免费一区二区三区免费视频 | 99久久伊人精品波多野结衣 | av在线亚洲男人的天堂 | 69老司机亚洲精品一区 | 特级淫片欧美高清视频蜜桃 | www.国产一区二区三区 | 日韩天堂视频 | 视频免费 | 精品国偷自产在线 | 护士伦理片 | 91高清国产经典在线观看 |