最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 多線程有序執(zhí)行的幾種方法總結(jié)

 更新時間:2017年03月17日 14:19:12   投稿:lqh  
這篇文章主要介紹了Java 多線程有序執(zhí)行的幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下

Java 多線程有序執(zhí)行的幾種方法總結(jié)

同事無意間提出了這個問題,親自實踐了兩種方法。當(dāng)然肯定還會有更多更好的方法。

方法一

import java.util.concurrent.atomic.AtomicInteger;

public class OrderedThread1 {
 
 static AtomicInteger count = new AtomicInteger(0);

 public static void main(String[] args) throws InterruptedException {
 Task task1 = new Task(count, 0);
 Task task2 = new Task(count, 1);
 Task task3 = new Task(count, 2);
 Thread thread1 = new Thread(task1);
 Thread thread2 = new Thread(task2);
 Thread thread3 = new Thread(task3);
 thread1.setDaemon(true);
 thread2.setDaemon(true);
 thread3.setDaemon(true);
 thread1.start();
 thread2.start();
 thread3.start();
 
 Thread.sleep(1 * 1000);
 }

}

class Task implements Runnable {
 
 private AtomicInteger count;
 private int order;
 
 public Task(AtomicInteger count, int order) {
 this.count = count;
 this.order = order;
 }

 @Override
 public void run() {
 while (true) {
  if (count.get() % 3 == order) {
  System.out.println(Thread.currentThread().getName() + " ===== "+ order);
  count.incrementAndGet();
  }
 }
 }
}

    這種方法應(yīng)該是比較常見的解決方案。利用原子遞增控制線程準(zhǔn)入順序。

方法二

public class OrderedThread2 {
 static Holder holder = new Holder();
 public static void main(String[] args) throws InterruptedException {
 
 Task1 task1 = new Task1(holder, 0);
 Task1 task2 = new Task1(holder, 1);
 Task1 task3 = new Task1(holder, 2);
 Thread thread1 = new Thread(task1);
 Thread thread2 = new Thread(task2);
 Thread thread3 = new Thread(task3);
 thread1.setDaemon(true);
 thread2.setDaemon(true);
 thread3.setDaemon(true);
 thread1.start();
 thread2.start();
 thread3.start();
 
 Thread.sleep(1 * 1000);
 

 }

}

class Task1 implements Runnable {
 
 Holder holder;
 int order;
 
 public Task1(Holder holder, int order) {
 this.holder = holder;
 this.order = order;
 }

 @Override
 public void run() {
 while (true) {
  if (holder.count % 3 == order) {
  System.out.println(Thread.currentThread().getName() + " ===== "+ order);
  holder.count ++;
  }
 }
// int i = 0;
// while(i ++ < 10000){
//  holder.count ++;
// }
 }
}
class Holder {
 volatile int count = 0;
}

    方法二使用了volatile關(guān)鍵字。讓每個線程都能拿到最新的count的值,當(dāng)其中一個線程執(zhí)行++操作后,其他兩個線程就會拿到最新的值,并檢查是否符合準(zhǔn)入條件。

ps:volatile不是線程安全的。而且兩者沒有任何關(guān)系。volatile變量不在用戶線程保存副本,因此對所有線程都能提供最新的值。但試想,如果多個線程同時并發(fā)更新這個變量,其結(jié)果也是顯而易見的,最后一次的更新會覆蓋前面所有更新,導(dǎo)致線程不安全。在方法二中,一次只有一個線程滿足準(zhǔn)入條件,因此不存在對變量的并發(fā)更新。volatile的值是最新的與線程安全完全是不相干的,所以不要誤用volatile實現(xiàn)并發(fā)控制。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 解決maven打包失敗:程序包xxxx不存在問題

    解決maven打包失敗:程序包xxxx不存在問題

    這篇文章主要介紹了解決maven打包失敗:程序包xxxx不存在問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis關(guān)于動態(tài)排序 #{} ${}問題

    Mybatis關(guān)于動態(tài)排序 #{} ${}問題

    這篇文章主要介紹了Mybatis關(guān)于動態(tài)排序 #{} ${}問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java中如何調(diào)用js

    java中如何調(diào)用js

    Nashorn是Java8中引入的一個新的JavaScript引擎,它允許在JVM上運(yùn)行JavaScript代碼,并且可以與Java代碼相互調(diào)用,Nashorn遵循JSR233規(guī)范,是一個純Java實現(xiàn)的JavaScript引擎,可以與Java程序無縫集成,提供動態(tài)腳本執(zhí)行和靈活性
    2025-01-01
  • Java Apache Shiro安全框架快速開發(fā)詳解流程

    Java Apache Shiro安全框架快速開發(fā)詳解流程

    Apache Shiro是一個強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗證、授權(quán)、密碼和會話管理。使用Shiro的易于理解的API,您可以快速、輕松地獲得任何應(yīng)用程序,從最小的移動應(yīng)用程序到最大的網(wǎng)絡(luò)和企業(yè)應(yīng)用程序
    2021-10-10
  • Java實現(xiàn)簡單堆棧代碼

    Java實現(xiàn)簡單堆棧代碼

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單堆棧代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • java中處理socket通信過程中粘包的情況

    java中處理socket通信過程中粘包的情況

    本篇文章主要介紹了java中處理socket通信過程中粘包的情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 使用SpringJPA?直接實現(xiàn)count(*)

    使用SpringJPA?直接實現(xiàn)count(*)

    這篇文章主要介紹了SpringJPA?直接實現(xiàn)count(*),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java Http多次請求復(fù)用同一連接示例詳解

    Java Http多次請求復(fù)用同一連接示例詳解

    這篇文章主要為大家介紹了Java Http多次請求復(fù)用同一連接示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • SpringBoot實現(xiàn)二維碼掃碼登錄的原理及項目實踐

    SpringBoot實現(xiàn)二維碼掃碼登錄的原理及項目實踐

    本文主要介紹了SpringBoot實現(xiàn)二維碼掃碼登錄的原理及項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SpringBoot中OKHttp和壓縮文件的使用實戰(zhàn)教程

    SpringBoot中OKHttp和壓縮文件的使用實戰(zhàn)教程

    本文介紹了如何在SpringBoot中使用OKHttp發(fā)起請求和處理壓縮文件,包括文件的存儲配置、實體類、配置類和初始化類的設(shè)置,以及如何通過主程序和測試類進(jìn)行實際操作,最后提供了必要的依賴添加方法,以確保功能的實現(xiàn)
    2024-10-10

最新評論

河间市| 成武县| 贵定县| 垦利县| 张掖市| 三穗县| 达日县| 平江县| 孟州市| 张家口市| 砚山县| 宕昌县| 富裕县| 怀仁县| 驻马店市| 闻喜县| 通河县| 赤水市| 巩留县| 吉木萨尔县| 安多县| 晋宁县| 鹰潭市| 房山区| 肇州县| 云浮市| 古丈县| 静宁县| 浪卡子县| 兰溪市| 桦甸市| 华容县| 马山县| 徐州市| 岳西县| 汝南县| 东丽区| 平阳县| 贺兰县| 台湾省| 双鸭山市|