현재 디바이스로부터 데이터를 수신하고 지오 펜스 및 기타 관련 로직을 확인하는 것과 같은 긴 프로세스를 수행하고 결국 데이터를 db에 저장하는이 소켓 프로그램이 있습니다. 다음은 내 코드는 소켓을 공공 정적 무효 메인 (문자열 []에 args)를 시작소켓 데이터를 가져온 후 추가 처리를 위해 별도의 스레드를 호출 하시겠습니까?
이 코드를 보는 방법은 {여기
new commS();
}
commS() {
try {
// setup the connection pool
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/****");
config.setUsername("*****");
config.setPassword("*****");
config.setMaximumPoolSize(20);
//config.setPartitionCount(1);
connectionPool = new HikariDataSource(config); // setup the connection pool
}
catch (Exception e) {
e.printStackTrace(System.out);
}
try
{
final ServerSocket serverSocketConn = new ServerSocket(8000);
while (true)
{
try
{
Socket socketConn1 = serverSocketConn.accept();
new Thread(new ConnectionHandler(socketConn1)).start();
}
catch(Exception e)
{
System.out.println("MyError:Socket Accepting has been caught in main loop."+e.toString());
e.printStackTrace(System.out);
}
}
}
catch (Exception e)
{
System.out.println("MyError:Socket Conn has been caught in main loop."+e.toString());
e.printStackTrace(System.out);
//System.exit(0);
}
연결 핸들러를 수행하는 소켓 연결 코드의 나머지 부분입니다 .
class ConnectionHandler implements Runnable {
private Socket receivedSocketConn1;
ConnectionHandler(Socket receivedSocketConn1) {
this.receivedSocketConn1=receivedSocketConn1;
}
public void run() { // etc
w = null;
BufferedReader r = null;
String message="";
try {
/// here I read for the data and call the rest of the function etc.
I would like to split into separate thread?
}
catch (SocketTimeoutException ex)
{
System.out.println("MyError:SocketTimeoutException has been caught in in the main first try");
ex.printStackTrace();
}
catch (IOException ex)
{
System.out.println("MyError:IOException has been caught in in the main first try");
ex.printStackTrace();
}
}
나는 내가 데이터를 읽고 내가 데이터를 확인하고 모든 다양한 기능 등을 호출하고 마지막으로 데이터를 저장 받도록 실행 기능에서 등 기능의 나머지 부분을 호출 여기 /// 표시 한 db. 나는 이것이 긴 과정이라고 생각한다. 나는 데이터를 읽은 다음이 문자열을 별도의 스레드에 전달하여 달성하고자하는 것보다 아래에있는 두 섹션을 하나 부러 뜨리고 싶습니다.
따라서 실행 기능에서이 스레드 t = new Thread (new MyRProcessing (parameter))를 수행 할 계획입니다. t.start(); 나는 이것이 정확하다는 것을 너무 확신하지 못합니까? 별도의 .java로 MyRProcessing을 작성하거나 하나의 java에 모두 넣어야합니까?
public class MyRProcessing implements Runnable {
private X parameter;
public MyRProcessing (X parameter) {
this.parameter = parameter;
}
public void run() {
}
}
들어가기 전에 몇 가지 멀티 스레딩 자습서를 읽는 것이 좋습니다. 복잡한 주제이기 때문에 많은 질문을 던지기 때문에 "날개 달기"를 시도하면 머리를 숙일 것입니다. 그렇지 않으면 장기 실행 프로세스가있는 경우 최소한 생산자 - 소비자 패턴에서 이점을 얻을 수있는 것처럼 보입니다. – Kayaman
예 저는이 스레드를 t = new Thread (새 MyRProcessing (매개 변수)) 호출에 대해 발견 한 일부 및 google을 읽었습니다. – user5313398
내가하려고하는 것이 맞는지 아닌지에 대한 확인이 필요합니까? 실제로 내 문제는 간단합니다. 하나의 스레드로 읽고 나머지 스레드를 다른 스레드로 전달하여 스레드가 다른 스레드로 넘치지 않도록하려면 두 개의 별도 스레드로 나누고 싶습니다. – user5313398