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
'Language > Java' 카테고리의 다른 글
static 과 JVM 메모리 모델을 이해해보자! (1) | 2024.09.01 |
---|---|
컬렉션 API 개선 - modern java in action (0) | 2024.06.18 |
스트림 Stream 을 사용하는 이유 - Modern Java in Action (2) | 2023.10.02 |
Modern Java in Action - Reviews(모던 자바 인 액션 - 리뷰) (0) | 2023.10.02 |
ArrayList 와 LinkedList 의 차이점 (0) | 2023.05.12 |