1. 程式人生 > >利用多執行緒(用到原子類AtomicInteger)往資料庫批量插入大量資料

利用多執行緒(用到原子類AtomicInteger)往資料庫批量插入大量資料

package duocharu;

import com.minisay.base.util.OJDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author xiaobu
 * @version JDK1.8.0_171
 * @date on  2018/10/18 12:23
 * @descrption  oracle 多個執行緒插入
 */
public class MyThread extends Thread {
    private static AtomicInteger index = new AtomicInteger(0);
    private static long time1 = 0;

    public void run() {
        Connection conn =null;
        PreparedStatement preparedStatement=null;
        int i = index.getAndIncrement();
        try {
            conn= OJDBCUtils.getConn();
            assert conn != null;
            conn.setAutoCommit(false);
            String sql = "INSERT  INTO  tb_demo1(id) values(?)";
            preparedStatement= conn.prepareStatement(sql);
            int count = 10000000;
            for (int j = i * count; j < (i + 1) * count; j++) {
                preparedStatement.setInt(1, j + 1);
                preparedStatement.addBatch();
                if ((j % 50000 == 0 && j != 0) || j == (count - 1)) {
                    preparedStatement.executeBatch();
                    conn.commit();
                    preparedStatement.clearBatch();
                }
            }
            preparedStatement.executeBatch();
            preparedStatement.clearBatch();
            conn.commit();
            preparedStatement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            OJDBCUtils.closeStatement(preparedStatement);
            OJDBCUtils.closeConnection(conn);
        }
        System.out.println("當前執行緒:" + Thread.currentThread().getName() + "_" + i + " 耗時:" + (System.currentTimeMillis() - time1) / 1000 + " s");

    }

    public static void main(String[] args) {

        time1 = System.currentTimeMillis();
        System.out.println("當前時間:" + time1);
            MyThread myThread1 = new MyThread();
            MyThread myThread2 = new MyThread();
            MyThread myThread3 = new MyThread();
            MyThread myThread4 = new MyThread();
            MyThread myThread5 = new MyThread();
            MyThread myThread6 = new MyThread();
            MyThread myThread7 = new MyThread();
            MyThread myThread8 = new MyThread();
            MyThread myThread9 = new MyThread();
            MyThread myThread10 = new MyThread();
            myThread1.start();
            myThread2.start();
            // myThread3.start();
            // myThread4.start();
            // myThread5.start();
            // myThread6.start();
            // myThread7.start();
            // myThread8.start();
            // myThread9.start();
            // myThread10.start();


    }
}

經過測試oracle單個執行緒和多個執行緒插入效率差不多,但是mysql就有明顯的差別

相關推薦

利用執行原子AtomicInteger資料庫批量插入大量資料

package duocharu; import com.minisay.base.util.OJDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import

Java執行系列---“JUC原子”01之 原子的實現CAS演算法

轉自:https://blog.csdn.net/ls5718/article/details/52563959  & https://blog.csdn.net/mmoren/article/details/79185862(含部分修改)   在JDK 5之前Java語言是靠

Java執行系列--“JUC原子”03之 AtomicLong原子

轉自:https://www.cnblogs.com/skywang12345/p/3514593.html(含部分修改) 概要 AtomicInteger, AtomicLong和AtomicBoolean這3個基本型別的原子類的原理和用法相似。本章以AtomicLong對基本型別的原子類進行介紹。內容

Java執行系列---“JUC原子”04之 AtomicLongArray原子

轉自:https://www.cnblogs.com/skywang12345/p/3514604.html(含部分修改) 概要 AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray這3個數組型別的原子類的原理和用法相似。本章以AtomicLo

Java執行系列---“JUC原子”05之 AtomicReference原子

轉自:http://www.cnblogs.com/skywang12345/p/3514623.html(部分修改) 概要 本章對AtomicReference引用型別的原子類進行介紹。內容包括: AtomicReference介紹和函式列表 AtomicReference原始碼分析(基於J

Java執行系列---“JUC原子”06之 AtomicLongFieldUpdater原子

轉自:http://www.cnblogs.com/skywang12345/p/3514635.html (含部分修改) 概要 AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater這3個修改類的成員的原

Java執行系列---“JUC原子”02之 框架

轉自:http://www.cnblogs.com/skywang12345/p/3514589.html   根據修改的資料型別,可以將JUC包中的原子操作類可以分為4類。 1. 基本型別: AtomicInteger, AtomicLong, AtomicBoolean ;2.&

PHP實現守護程序任務後臺執行執行php-resque使用說明

訊息佇列處理後臺任務帶來的問題 專案中經常會有後臺執行任務的需求,比如傳送郵件時,因為要連線郵件伺服器,往往需要5-10秒甚至更長時間,如果能先給使用者一個成功的提示資訊,然後在後臺慢慢處理髮送郵件的操作,顯然會有更好的使用者體驗。 為了實現類似的需求,We

java執行系列--"JUC"原子 01 之框架

根據修改的資料型別,可以將JUC包中的原子操作類可以分為4類 1 基本型別:AtomicInteger,AtomicLong,AtomicBoolean; 2 陣列型別:AtomicIntegerArray,AtomicLongArray,AtomicReferenceA

Java執行系列--“JUC原子”01之 框架

根據修改的資料型別,可以將JUC包中的原子操作類可以分為4類。 基本型別: AtomicInteger,AtomicLong, AtomicBoolean ; 陣列型別: AtomicIntegerArray, AtomicLongArray,Ato

JAVA 執行生產者和消費者模式

在生產-消費模式中:通常由兩類執行緒,即若干個生產者的執行緒和若干個消費者的執行緒。生產者執行緒負責提交使用者請求,消費者執行緒則負責具體處理生產者提交的任務,在生產者和消費者之間通過共享記憶體快取區進行通訊。 主要構成: provider:生產者執行緒負責生產資料 consume

再說說單例模式和執行靜態內部類實現

靜態內部類: package thread.singleton; public class StaticInnerClassSingleton { private static class Singleton{ private static Singleton si

Java基礎複習一之執行併發,記憶體模型

前言:畢業來北京轉眼一年半了,但是沒有太多的成績。沒有太多的記錄和沉澱。現在開始複習一下基礎的知識。涉及到的有多執行緒,集合,JVM,NIO,資料庫,作業系統。後面還是想走實時處理那一塊,可能會有那方面的研究。 多執行緒:為啥用?因為想去執行不同的任務,或利用現狀多核的處

Java執行之Atomic:原子變數與原子

一、何謂Atomic?  Atomic一詞跟原子有點關係,後者曾被人認為是最小物質的單位。計算機中的Atomic是指不能分割成若干部分的意思。如果一段程式碼被認為是Atomic,則表示這段程式碼在

Winform 利用執行做的一個網站壓力測試小工具帶原始碼

我們一直在做網站,但在我河南這塊,對測試工作,特別是壓力測試一般都不怎麼在意,都是自己訪問一下速度不錯就行了,再就是資料庫訪問速度測試也是同樣情況 程式設計師在寫Sql程式碼時,一般是一個人寫完之後,一執行可快完事 其實這些是不夠的,我們根本沒有進行過多使用者多執行緒的測試,如果是100個,一千個要同時訪問,

執行1:繼承Thread和實現Runnable介面

多執行緒的兩種實現方法: 1.繼承Thread類     繼承Thread類,重寫run()方法。建立多執行緒的時候,需要建立物件例項,然後呼叫start()方法。類物件的屬性屬於執行緒私有,執行緒之間互不影響。 public class ClassExtendT

java執行14ThreadLocal

ThreadLocal類物件可以為每一個執行緒都建立一個“副本”,使得好像每一個執行緒都“擁有了”ThreadLocal類物件一樣 以下為程式碼示例,具體的講解穿插在程式碼中 class Account2{ private ThreadLocal<

java day25 執行 單例Runtime,Timer

25.01_多執行緒(單例設計模式)(掌握) 單例設計模式:保證類在記憶體中只有一個物件。 如何保證類在記憶體中只有一個物件呢? (1)控制類的建立,不讓其他類來建立本類的物件。private (2)在本類中定義一個本類的物件。Singl

Java執行2—— 執行實現之繼承Thread

1.1、使用多執行緒 一個程序在執行時至少會有1個執行緒在執行,執行緒會在後臺執行;例如呼叫public static void main() 方法的執行緒就是如此,而且由JVM建立。 package

理解執行--原子量和原子操作

原子量 互斥量可以對於共享變數的訪問進行加鎖,可以保證對臨界區的互斥訪問,但加鎖總是繁瑣的,所以提供了更簡單的共享變數保護訪問的操作,原子量和原子操作。 原子量的構造 原子量包含在#include 中,對於基本型別,我們可以這樣定義原子變數 std::atomic_b