zoukankan      html  css  js  c++  java
  • java线程池之synchronized锁

     1  //Object 定义了一个引用类型的对象用于加锁
     2     static Object Lock = new Object();
     3     //定义一个int类型变量0做初始值
     4     static int iCheck = 0;
     5 
     6     public static void main(String[] args) {
     7         //第一个线程
     8         int a = 0;
     9         //创建一个数组保存打印的数值
    10         List<Integer> list = new ArrayList<>();
    11         //设置线程池大小为4
    12         ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);
    13         //i从0开始递增1,直到小于1000跳出循环
    14         for (int i = 0; i < 1000; i++) {
    15             list.add(a);
    16             a++;
    17         }
    18         //循环触发4个任务丢给线程池处理
    19         for (int i = 0; i < list.size(); i++) {
    20             int z = list.get(i);
    21             //把任务交给线程池
    22             fixedThreadPool.execute(() -> {
    23                 Test(z);
    24             });
    25         }
    26     }
    27 
    28     public static void Test(int z) {
    29         try {
    30             do {
    31                 //从0开始递增,
    32                 if (iCheck == z) {
    33                     synchronized (Lock) {
    34                         //输出线程名称和当前值
    35                         System.out.println(Thread.currentThread().getName() + " " + z);
    36                         iCheck += 1;
    37                     }
    38                     break;
    39                 }
    40                 //让出cup时间给其他满足条件的线程执行
    41                 Thread.yield();
    42 
    43             } while (true);
    44             //每个线程休息1秒后继续工作,4个线程完成循环后第一个线程继续工作
    45             Thread.sleep(1000);
    46         } catch (InterruptedException e) {
    47         }
    48     }

    pool-1-thread-1 0
    pool-1-thread-2 1
    pool-1-thread-3 2
    pool-1-thread-4 3
    pool-1-thread-1 4
    pool-1-thread-3 5
    pool-1-thread-4 6
    pool-1-thread-2 7
    pool-1-thread-1 8

    打印结果顺序输出

  • 相关阅读:
    BZOJ 2299 向量
    BZOJ 1237 配对
    BZOJ 2226 LCMSum
    BZOJ 1876 SuperGCD
    查漏补缺:C++STL简述(容器部分)
    查漏补缺:Linux进程与线程的区别
    码海拾遗:常用的其中排序算法
    码海拾遗:简述C++(一)
    码海拾遗:简单的链表类
    码海拾遗:位运算实现加减乘除
  • 原文地址:https://www.cnblogs.com/gegelaopiaoke/p/10610129.html
Copyright © 2011-2022 走看看