`

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 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面试题集__很有用啊

    - **增量回收**: 分批次进行回收,减少应用程序暂停时间。 #### 4. 线程同步方法 - **方法**: - `wait()`: 使线程进入等待状态并释放对象锁。 - `sleep(long millis)`: 让线程暂停指定的时间,不会释放锁。 - ...

    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

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

    java 面试题(集锦)

    - **步骤**:加载驱动、建立连接、执行SQL语句、处理结果。 - **Statement与PreparedStatement**:`PreparedStatement`更安全且支持参数化查询,可防止SQL注入。 ### JSP & Servlet技术 #### 1. JSP与Servlet的...

    深入理解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