728x90

멀티 쓰레드 이용해서 자바 달력 코드 변경 하는 구문입니다. 

예시 ) 50개의 스레드 를 이용해서 for 문을 돌릴때 50개의 순서대로 시간이 상승하는 코드입니다. 

50개가 같은 시간으로 값을 보내는게 아닌 한개의 스레드마다 대략 26개의 데이터를 00:00:00 개의 넣고 차례대로 1초씩 상승해서 데이터를 넣습니다. 

	private static final String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";
	private static final AtomicInteger sharedCounter = new AtomicInteger(0);
	private static volatile String startDateString = "2021-10-01 00:00:00";
    
    //시간이 다 지나면 날짜가 하루 올라가는 코드 구문
public static String generateDate(int len) { 
        try {
            String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";
            FastDateFormat format = FastDateFormat.getInstance(FORMAT_STRING);

            Date startDate = format.parse(startDateString); 

            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);

            for (int day = 1; day <= 1; day++) {
                for (int i = 1; i <= len; i++) {
                    cal.add(Calendar.MILLISECOND, 28);
                    System.out.println(i + " : " + format.format(cal));
                }
                cal.setTime(startDate);
                cal.add(Calendar.DATE, 1); 
                startDateString = format.format(cal);
            }
            return startDateString;

        } catch (Exception e) {
            e.printStackTrace();
            return null; // or handle the exception as appropriate for your use case
        }
    }
    
    @Override
	public void run() {
	
		int total = 0;
		int lengSize = 100;
		long started = System.currentTimeMillis();
		try {
			JSONObject event = new JSONObject();
			
			for (int i = 0; i < lengSize; i++) {
				int currentValue = getNextValueFromSharedCounter();
				String formattedDate = getFormattedDate(currentValue);
				Map<String, Object> result = test(formattedDate, lengSize);
				for (String key : result.keySet()) {
					event.put(key, result.get(key));
				}
				submitServletDataSync("http://192.168.0.12:8081/drpc/" + svc, event.toString());
				total++;

			}
		
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long now1 = System.currentTimeMillis();
		System.out.println("TPS " + lengSize / ((now1 - started)/ 1000.0));
	}
    
    
 private static int getNextValueFromSharedCounter() {
		return sharedCounter.getAndIncrement();
	}
    
private static String getFormattedDate(int counter) throws ParseException {
		Calendar cal = Calendar.getInstance();
		String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";
		FastDateFormat format = FastDateFormat.getInstance(FORMAT_STRING);
        Date startDate = format.parse(startDateString);
        cal.setTime(startDate);
		// Use the counter to modify the date
        cal.setTimeInMillis(cal.getTimeInMillis() + counter * 28);
		return format.format(cal.getTime());

		// Your existing test and submitServletDataSync methods...
	}
    
    
  	public static void main(String[] args) throws Exception {
		Runnable r = new FdsTestSource();
		ExecutorService excutor = Executors.newFixedThreadPool(20);
		int n = 2;
		for (int i = 0; i < n; i++) {
			excutor.submit(r);
			Thread.sleep(10);
		}
		excutor.shutdown();
		excutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
	}
728x90
복사했습니다!