- 스레드. 배치파일2024년 08월 06일
- chantleman
- 작성자
- 2024.08.06.:12
프로세스는 운영 체제에서 실행중인 프로그램
프로그램의 코드, 데이터, 메모리 등 자원을 관리
스레드는 프로세스 내에서 실행되는 작업의 흐름을 나타냄
한 프로세스는 여러 스레드를 가질 수 있음 → 여러 작업을 병렬로 수행 가능
스레드는
다수의 클라이언트로부터 다수의 요청을 처리해야 하는 서버,
여러 작업을 동시에 처리해야 하는 실시간 시스템(채팅, 로봇, 항공기 제어 등)
등에 사용됩니다.
ctrl + alt + del
작업관리자 → 자세히
백그라운드 프로세스에서 실행중인 프로그램을 확인할 수 있는데
cpu의 코어는 프로세스가 실행하는 명령어들을 처리하는 역할을 합니다.
각 코어는 명령어를 읽고 해석하며 계산을 수행하고 결과를 저장하는 등의 작업을 수행합니다.
코어는 하나의 일밖에 처리하지 못하지만, 스케줄링을 통해 여러개의 작업을 병렬로 처리하는데 그것을 하이퍼 스레딩이라고 합니다.
스레드 상속받는 법
extends Thread 혹은 implements Runnable
<스레드 이용해서 채팅 만들기>
1. DB 테이블 생성
2. chatDao
public class ChatDao { private static ChatDao instance; private ChatDao() { } public static ChatDao getInstance() { if (instance == null) { instance = new ChatDao(); } return instance; } JDBCUtil jdbc = JDBCUtil.getInstance(); public void sendMessage(List<Object> param) { //insert String sql="insert into chat(user1, user2, message, reception)\r\n" + "values(?,?,?,'1')"; jdbc.update(sql,param); } public List<Map<String,Object>> receiveMessage(List<Object> param){ //select String sql="select * from chat \r\n" + "where user2=?\r\n" + "and reception='1'"; return jdbc.selectList(sql,param); } public void updateReceive(List<Object> param) { //update String sql="update chat\r\n" + "set reception='0'\r\n" + "where user2=?"; jdbc.update(sql,param); } }
2. chatService
public class ChatService { private static ChatService instance; private ChatService() { } public static ChatService getInstance() { if (instance == null) { instance = new ChatService(); } return instance; } ChatDao dao = ChatDao.getInstance(); public void sendMessage(List<Object> param) { dao.sendMessage(param); } public List<Map<String,Object>> receiveMessage(List<Object> param){ return dao.receiveMessage(param); } public void updateReceive(List<Object> param) { dao.updateReceive(param); } }
4. chatJob
public class ChatJob extends Thread{ String user; public ChatJob(String user) { this.user=user; } ChatService chat = ChatService.getInstance(); @Override public void run() { while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } List<Object> param = new ArrayList(); param.add(user); List<Map<String,Object>> list = chat.receiveMessage(param); if(list == null) continue; for(Map<String,Object> map :list) { System.out.println("보낸 사람: "+ map.get("USER1")); System.out.println("메시지: "+ map.get("MESSAGE")); System.out.println("받는 사람: "+ map.get("USER2")); System.out.println("읽음: "+ map.get("RECEPTION")); } chat.updateReceive(param); } } }
5. chatMain
public class ChatMain { public static void main(String[] args) { ChatService chatService = ChatService.getInstance(); String user= ScanUtil.nextLine("유저 아이디: "); ChatJob chat = new ChatJob(user); chat.start(); while(true) { System.out.println("0 입력시 종료"); String sendUser = ScanUtil.nextLine("발신자: "); String message = ScanUtil.nextLine("메시지: "); if(sendUser.equals("0")) break; List<Object> param = new ArrayList(); param.add(user); param.add(sendUser); param.add(message); chatService.sendMessage(param); } } }
ip바꿔주면 다른 사람과 채팅 가능
(상대방 DB로 데이터가 들어감)
< cmd 로 실행하기 >
1. jar파일 생성
Main파일 우클릭 export
Runnable JAR file 클릭
경로 지정 후 Launch configuration 에서 main 파일 체크,
Extract required libraries into generated JAR 체크 후 finish
2. 폴더 생성된 것 확인
3. cd 폴더경로 입력 후 (저는 D드라이브로 다시 옮겼습니다.)
java -jar chat .jar (jar 파일 이름)
< 배치 파일로 실행하기 >
메모장에 아래와 같은 양식으로 기입
@echo on
title 폴더 이름
명령어
pause
파일 저장할 때
확장자를 bat로 하고 폴더에 저장
멀티 스레드 사용하기
ExecutorService exe = Executors.newFixedThreadPool(16);
exe.execute(new ThreadJob(href, file));
멀티 스레드로 하면 빨리 데이터 가져올 수 있음
public class Step4Listpage_Thread { public static void main(String[] args) { Step4Listpage_Thread sl = new Step4Listpage_Thread(); sl.process(); } ExecutorService exe = Executors.newFixedThreadPool(16); public void process() { File root = new File("yes24/step4"); boolean chk = false; for (File bigMenu : root.listFiles()) { System.out.println("대메뉴 : " + bigMenu); if(bigMenu.getName().contains("자기계발")) continue; if(bigMenu.getName().contains("자연과학")) continue; if(bigMenu.getName().contains("잡지")) continue; if(bigMenu.getName().contains("전집")) continue; if(bigMenu.getName().contains("중등참고서")) continue; for (File middle : bigMenu.listFiles()) { System.out.println("\t중메뉴 : " + middle); for (File f : middle.listFiles()) { System.out.println("\t\t리스트 : " + f); String folder = f.getPath().replace("step4", "step5").replace(".html", ""); File dir = new File(folder); if (!dir.exists()) dir.mkdirs(); else continue; List<Map<String, String>> list = parser(f); for (Map<String, String> map : list) { String name = map.get("name"); name = changeName(name); String href = map.get("href"); File file = new File(dir, name + ".html"); if (file.length() !=0 && file.exists()) continue; exe.execute(new ThreadJob(href, file)); } } } } } public String changeName(String name) { String[] change = {"&", ":", "?","/","\"","|","*"}; for(String c : change) name = name.replace(c, ""); return name; } public List<Map<String, String>> parser(File f) { List<Map<String, String>> list = new ArrayList(); try { String html = Files.readString(Paths.get(f.getPath())); if ((html.equals(""))) { System.out.println("html 수집 에러"); } String[] lines = html.split("\n"); for (String line : lines) { if (line.contains("gd_nameF")) { String temp = line.split("</a>")[0]; String href = temp.split("href=\"")[1].split("\"")[0]; String name = temp.split(">")[3]; Map<String, String> map = new HashMap(); map.put("name", name); map.put("href", href); list.add(map); } } } catch (IOException e) { e.printStackTrace(); } return list; } } class ThreadJob extends Thread{ String href; File file; public ThreadJob(String href, File file) { this.href = href; this.file = file; } @Override public void run() { String url = JsoupUtil.rootUrl + href; try { String html =""; try { html = JsoupUtil.getHtml(url); } catch (Exception e) { } if(html.equals("")) { html = JsoupUtil.getHtml(url); } Files.write(Paths.get(file.getPath()), html.getBytes()); System.out.println("\t\t\t 파일 : "+file); } catch (IOException e) { e.printStackTrace(); } } }
728x90'자바' 카테고리의 다른 글
maven (0) 2024.08.09 톰캣 포트 변경하기 (0) 2024.08.07 mvc (0) 2024.07.30 eclispe 상위 버전 (0) 2024.07.29 collection (0) 2024.07.26 다음글이전글이전 글이 없습니다.댓글