`

java重复批次执行

 
阅读更多
方案1  使用Phaser
方案2  使用CyclicBarrier


package com.eyu.ahxy.module.common.config;

import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.MAX;
import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.NUM;
import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest4.phaser;

import java.util.concurrent.Phaser;

public class OneTwoOneTwoTest4 {
	static int NUM = 0;
	static int MAX = 6;
	static Object LOCK = new Object();
	static Phaser phaser = new Phaser(2);

	public static void main(String[] args) throws InterruptedException {
		Thread thread1 = new ThreadTest4();
		thread1.start();
		Thread thread2 = new ThreadTest4();
		thread2.start();
		thread1.join();
		thread2.join();

	}

}

class ThreadTest4 extends Thread {

	public void run() {
		while (true) {

			synchronized (phaser) {
				NUM = NUM + 1;
				System.err.println(NUM + "        ====" + Thread.currentThread());
				if (NUM >= MAX) {
					break;
				}
			}
			phaser.arriveAndAwaitAdvance();
		}
	};

}



package com.eyu.ahxy.module.common.config;

import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest5.MAX;
import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest5.NUM;
import static com.eyu.ahxy.module.common.config.OneTwoOneTwoTest5.cyclicBarrier;

import java.util.concurrent.CyclicBarrier;

public class OneTwoOneTwoTest5 {
	static int NUM = 0;
	static int MAX = 6;
	static CyclicBarrier cyclicBarrier;

	public static void main(String[] args) throws InterruptedException {
		cyclicBarrier = new CyclicBarrier(2);
		Thread thread1 = new ThreadTest5();
		thread1.start();
		Thread thread2 = new ThreadTest5();
		thread2.start();
		thread1.join();
		thread2.join();
	}
}

class ThreadTest5 extends Thread {

	public void run() {
		while (true) {

			synchronized (ThreadTest5.class) {
				NUM = NUM + 1;
				System.err.println(NUM + "        ====" + Thread.currentThread());
				if (NUM >= MAX) {
					break;
				}
			}

			try {
				cyclicBarrier.await();
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
	};

}

0
0
分享到:
评论

相关推荐

    Java批次8

    Java批次处理(Java Batch)是Java EE平台中的一个重要组成部分,主要用来处理大量数据或执行重复性的任务。在Java批次8中,我们关注的是Java Batch API的最新改进和特性,这有助于提升应用程序的效率和可维护性。...

    Java面试知识文档

    当程序运行时出现异常情况,如数组越界、空指针访问等,Java会自动抛出一个异常对象。异常处理的核心在于能够捕获这些异常,并做出适当的响应。 **异常分类**: - **内置异常**: 如`ArrayIndexOutOfBoundsException`...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    16.3.3 执行时期读取注释信息 549 16.4 重点复习 551 16.5 课后练习 551 appendixa 如何使用本书项目 553 a.1 项目环境配置 554 a.2 打开案例 554 appendixb mysql入门 557 b.1 安装、设定mysql 558 ...

    java_access_jdbc.zip

    它允许Java程序通过JDBC API来执行SQL语句,实现对数据库的增删改查等操作。在这个"java_access_jdbc.zip"压缩包中,我们很可能是探讨如何使用Java的JDBC API来连接Microsoft Access数据库并进行数据查询,特别是...

    java开发面试题 100页 20220709

    Java开发面试题涵盖了许多核心知识点,包括数据库优化、SQL查询、事务处理、数据类型、查询性能分析、并发控制、数据库操作、JDBC、大数据处理、索引、存储过程、视图、数据库性能优化、Java运算符、循环结构、跳转...

    南京各大公司java面试题集锦

    函数是执行特定任务的代码块,可以在程序中多处调用以避免重复编写相同的代码。 #### 开发过程中需要提交的报告(南京大汉网络) **题目解析:** - **报告类型:** - 项目计划报告:概述项目的整体规划和目标。 ...

    spark core、spark sql以及spark streaming 的Scala、java项目混合框架搭建以及大数据案例

    3. **Spark Streaming**:Spark Streaming是Spark处理实时数据流的组件,它将数据流分解为小批次,然后使用Spark Core进行快速处理。项目中可能包含创建DStream(Discretized Stream),设置窗口操作,以及实现复杂...

    基于java的新冠疫苗接种管理系统系统设计与实现.docx

    疫苗信息管理模块则涵盖了疫苗的生产厂家、批次、有效期等关键信息,便于追踪疫苗的来源和状态。接种记录管理模块记录每个接种者的接种时间、接种地点、疫苗种类等,以供后续统计和分析。预约功能是系统的一大亮点,...

    深入理解SparkStreaming执行模型

    Spark Streaming的核心是一个执行模型,这个执行模型基于微批处理(micro-batch processing)的概念,允许将实时数据流切分成小批次进行处理。下面将详细介绍Spark Streaming执行模型的知识点。 首先,Spark ...

    cg-java-project:CapGemini学员的核心Java项目2021年3月

    【标题】"cg-java-project:CapGemini学员的核心Java项目2021年3月" 指的是一个由CapGemini公司为学员设计的核心Java编程项目,该项目可能旨在提升学员对Java语言的理解和实际应用能力,特别是针对2021年3月批次的...

    Storm_Trident

    Spout在Trident中必须是幂等的,即重复执行同一操作不会影响结果。 - **Stream Groupings**:Trident提供了多种分组策略,如shuffle grouping(随机分组)、fields grouping(字段分组)、global grouping(全局...

    Spring启动批次样本

    批处理主要用于处理大量数据,例如数据导入导出、定期报表生成、数据清洗等场景,它强调的是效率和可重复性。Spring Batch作为Spring Framework的一部分,提供了一套完整的批处理解决方案,包括事务管理、错误处理、...

    Spark Streaming Programming Guide 笔记

    这对于提高性能非常关键,因为重复计算相同的 RDD 需要消耗大量资源。 - 对于基于窗口的操作(如 `reduceByWindow` 和 `reduceByKeyAndWindow`)以及基于状态的操作(如 `updateStateByKey`),这种持久化是隐式...

    struts 预加载数据demo

    Struts预加载数据的实现是Web开发中一种提高用户体验的技术,尤其在大数据量或复杂页面加载时,可以分批次提前获取部分数据,减轻用户等待时间。在这个“struts 预加载数据demo”中,我们将深入探讨如何使用Struts2...

    三种JDBC批量插入编程方法的比较

    在`JDBCBatchInsert.java`中,可以看到如何创建PreparedStatement对象,设置占位符,然后多次调用`addBatch()`添加不同的数据,最后调用`executeBatch()`执行批量插入。 2. **使用Statement的batchUpdate()** ...

    数据库的各种连接技巧

    在重复执行相同的SQL语句时,使用`PreparedStatement`比`Statement`更有效率。这是因为`PreparedStatement`会预先解析SQL语句,减少了解析时间。例如: ```java PreparedStatement pstmt = connection.prepare...

Global site tag (gtag.js) - Google Analytics