`
shifulong
  • 浏览: 59595 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JUC--Parser

    博客分类:
  • java
阅读更多
Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等

别人的牛逼的blok:  http://whitesock.iteye.com/blog/1135457

package com.test.uuu;

import java.util.concurrent.Phaser;

/**
 * Phaser:阶段的意思
 * 有两个概念:phase & party ,phase 表明当前执行的阶段,party当前注册了的线程数量
 * <p/>
 * 创建三个线程分别打印从'a'开始的的字母表,每个字母打印十次,
 * 三个线程打印完之后在继续打印,知道26个字母打印完
 * 打印结果如下
 */
public class PhaserTest {
    public static void main(String[] args) {
        System.out.println("start");
        Phaser phaser = new Phaser(3) {
            //1. return true -> parser就会终止
            //2. 每一个阶段执行完都会调用onAdvance
            @Override
            protected boolean onAdvance(int phase, int registeredParties) {
                System.out.printf("\n======phase : %s , parties : %s============分割线========================\n", phase, registeredParties);
                return registeredParties == 1; // 表示parser注册的线程数为1的时候终止parser
//                return phase >=3; //表示执行完第四阶段就会终止parser
            }
        };
        //PhaserTest.PhaserThread s = new PhaserTest().new PhaserThread('c',null);
        for (int i = 0; i < 3; i++) {
            //顺便复习下 内部类 和 静态内部类 初始化的知识
            new Thread(new PhaserTest().new PhaserThread((char) ('a' + i), phaser)).start();
        }
        //主线程注册到phaser中
        phaser.register();
        while (!phaser.isTerminated()) {
            phaser.arriveAndAwaitAdvance();
        }
        System.out.println("end");
    }

    class PhaserThread implements Runnable {
        private char letter;
        private Phaser phaser;
        public PhaserThread(char letter, Phaser phaser) {
            this.letter = letter;
            this.phaser = phaser;
        }
        public void run() {
            while (!phaser.isTerminated()) {
                for (int i = 0; i < 10; i++) {
                    System.out.print(letter + " ");
                }
                letter = (char) (letter + 3);
                if (letter > 'z') {
                    //取消当前线程的注册
                    phaser.arriveAndDeregister();
                    break;
                } else {
                    //执行完当前阶段,等待下一阶段
                    phaser.arriveAndAwaitAdvance();
                }
            }
        }
    }
}



结果如下
start
a a a b b b b b b b b b b a a a a a a a c c c c c c c c c c
======phase : 0 , parties : 4============分割线========================
f d f e e e e e e e e e e f d f d f d d d d d d d f f f f f
======phase : 1 , parties : 4============分割线========================
i i i i i i i i i i g g g g g g g g g g h h h h h h h h h h
======phase : 2 , parties : 4============分割线========================
k k k k k l j j l k l j l k k k l l l l l l j k j j j j j j
======phase : 3 , parties : 4============分割线========================
m m m m m m m o n o m o o o o o n n n n n n o o o m n n n m
======phase : 4 , parties : 4============分割线========================
p q q q q q q q q q q r p r p r p r p p p r p r p p r r r r
======phase : 5 , parties : 4============分割线========================
u s s s t s s s u s t s u s s t u t u t u t u t u u u t t t
======phase : 6 , parties : 4============分割线========================
w w w w w w w w w w v x x x x x x x x x x v v v v v v v v v
======phase : 7 , parties : 3============分割线========================
y y z z z y z y z z z z z z y y y y y y
======phase : 8 , parties : 1============分割线========================
end

  • 大小: 90.5 KB
分享到:
评论

相关推荐

    tuling-juc-final.zip

    本项目"tuling-juc-final.zip"显然聚焦于Java并发编程的实践,通过一系列代码示例来演示和解释Java内存模型(JMM)、`synchronized`关键字以及`volatile`关键字的使用。下面我们将深入探讨这些核心概念。 Java内存...

    java - juc - 多线程 - 学习 -思维导图

    java - juc - 多线程 - 学习 -思维导图

    Java-JUC-多线程 进阶

    Java-JUC-多线程进阶 Java-JUC-多线程进阶resources是 Java 并发编程的高级课程,涵盖了 Java 中的并发编程概念、线程安全、锁机制、集合类、线程池、函数式接口、Stream流式计算等多个方面。 什么是JUC JUC...

    Java 多线程与并发(7-26)-JUC - 类汇总和学习指南.pdf

    "Java 多线程与并发(7-26)-JUC - 类汇总和学习指南" Java 多线程与并发是 Java 编程语言中的一部分,用于处理多线程和并发编程。Java 提供了一个名为 JUC(Java Utilities for Concurrency)的框架,用于帮助开发者...

    heima-JUC-资料

    Java并发编程是Java Util Concurrency(JUC)库的核心内容,它为多线程环境提供了高效、安全且灵活的工具和API。JUC是Java 5及后续版本引入的一个重要特性,极大地提升了Java在多处理器和高并发环境下的性能表现。 ...

    个人学习-JUC-笔记

    Java并发编程是Java开发中的重要领域,而JUC(Java Util Concurrency)是Java平台提供的一套高级并发工具包,它极大地简化了多线程和并发控制的复杂性。本笔记主要围绕尚硅谷周阳老师的JUC课程展开,旨在帮助个人...

    juc-study编程笔记.md

    学习狂神说的juc编程的笔记

    A-JUC-JVM-Java并发知识..pdf

    ### JUC并发编程 #### JUC多线程及高并发 Java并发编程包(java.util.concurrent,简称JUC)封装了大量用于高并发编程的工具类和接口,其中涉及了线程池、阻塞队列、同步器、原子操作类等。在并发环境下,可以有效...

    juc-jenkins-2018:JUC Jenkins 2018演示源代码

    juc-jenkins-2018 JUC Jenkins 2018演示源代码 先决条件 为了运行此演示,必须有一个有效的JDK,git命令以及curl。 克隆存储库 将此存储库克隆到您家中的某个位置: git clone ...

    juc-1(2).docx

    【JUC 概念】 Java Util Concurrency (JUC) 是 Java SDK 中的一个核心包,位于 `java.util.concurrent` 下,它提供了丰富的线程同步和并发工具类,旨在简化多线程编程,提高程序的并发性能。JUC 包含了线程池、并发...

    juc_nio_linux.rar

    Java并发编程库(Java Util Concurrency,简称JUC)是Java平台中用于高效并发处理的重要工具,它提供了线程池、锁、原子变量等高级并发工具。在Java中,`java.util.concurrent`包包含了大量并发控制和并行计算的类与...

    JUC-3 微程序控制计算机系列实验资源

    微程序控制器实验1. 连接好实验线路,检查无误后接通电源。2. 将编程开关(MJ20)置为PROM(编程)状态。3. 将STATE UNIT中的STEP置为“STEP”状态,STOP置为“RUN”状态。4. 在UA5-UA0开关上置要写的某个微地址(八进制)...

    JUC-master

    《JUC:Java并发编程的艺术》 在Java世界中,JUC(Java Util Concurrency)是并发编程的核心库,它提供了丰富的...通过深入学习JUC-master项目,我们可以更深入地理解Java并发编程的原理和实践,提升我们的编程技能。

    juc-demo:JUC包下常用工具练习Demo

    juc-demo JUC包下常用工具练习Demo 内容: 1、Semaphore 2、CountDownLatch 3、CyclicBarrier 4、ReentrantLock + Condition实现阻塞队列 Created by @minghui.y.

    JUC线程高级

    JUC线程高级,

    juc-learn:juc相关源码的分析以及使用介绍

    本项目"juc-learn"专注于JUC相关源码的分析和使用介绍,旨在帮助开发者深入理解并熟练运用这些并发工具。 1. **并发基础** 在Java中,多线程是并发编程的基础。通过创建Thread对象或实现Runnable接口,我们可以...

    22 尚硅谷Java JUC线程高级视频

    教程视频:在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类, 用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文...

    江苏大学计组课设指令编写

    江苏大学计组课设指令编写是计算机组成原理课程设计报告的一部分,该报告的主要内容是设计和实现 JUC2 模型机的微程序。下面是该报告的详细知识点解释: 1. 目标要求 计算机组成原理课程设计的目标是设计和实现一...

    juc相关全套总结,全网最全,最精细。【请用MindManager打开,没有该破解软件的请留言】

    一个java的多线程juc总结,其中包含基础知识,现成的状态图,关于synchronized,线程优先级和线程分类,interrupt、interupted、isInterrupted的使用,sleep、yield、join的详细使用,锁和等待池介绍。

    快速排序(程序).txt

    根据给定文件的信息,我们可以提炼出关于“快速排序”这一算法的相关知识点。下面将详细介绍快速排序的基本概念、工作原理、代码实现以及应用示例等内容。 ### 快速排序概述 快速排序是一种高效的排序算法,由英国...

Global site tag (gtag.js) - Google Analytics